msbuild - 删除基于 MSBuild/Convention 的文件名生成中的尾部斜杠

标签 msbuild conventions convention-over-configur itemgroup

我正在尝试根据目录中的以下约定搜索一组程序集:

{SubDirName}\{SubDirName}.dll

我首先创建一个 MSBuild ItemGroup [通过在 .RecursiveDir 部分批处理另一个 ItemGroup]。

<AllAssemblies Include="$(SourceDirectory)\**\Test.*.dll" />
<Dirs Include="@(AllAssemblies->'%(RecursiveDir)')"/>

每个项目都有一个尾部斜杠,即:

<Message Text="@(Dirs)"/>

说:

SubDir1\;SubDir2\;SubDir3\

现在,我想从此列表中生成一组文件名。

问题在于:

<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" />

生成:

SubDir1\\SubDir1\.dll;SubDir2\\SubDir2\.dll;SubDir3\\SubDir3\.dll

我不希望 .dll 中的句点之前有斜杠。

实现这一目标的最简洁方法是什么?

我知道有一个 HasTrailingSlash 表达式运算符,但 OOTB 任务中没有任何删除TrailingSlash 任务的迹象?。我对所需的 MSBuild 版本并不挑剔。

最佳答案

你试过吗

<AssembliesByConvention Include="@(Dirs -> '%(Identity)%(Identity).dll')" Condition="HasTrailingSlash(%(Identity))" />
<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" Condition="!HasTrailingSlash(%(Identity))" />

关于msbuild - 删除基于 MSBuild/Convention 的文件名生成中的尾部斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308341/

相关文章:

structuremap - 使用基于 StructureMap 约定的注册设置实例生命周期

c# - 我的 Visual Studio 2019 WPF 应用程序在它应该是 exe 时将 dll 设置为输出

cordova - 尝试在模拟器中运行 PhoneGap WP8 应用程序失败 "MSBUILD FAILED TO COMPILE CordovaDeploy.exe"

.net - SSDT(SSRS 和 SSAS)项目的 MSBuild 15.0 (Visual Studio 2017) 错误 MSB4067 : "The element <State> beneath element <Project> is unrecognized"

python - 打印变量名称的约定是什么?

c# - MSBuild 后期构建

refactoring - 任何类中的方法顺序

java - 只是不好的惯例还是有问题? Java 中的括号

ruby-on-rails - 如何配置 Rails 来访问不在其常规目录位置的媒体资源?