我正在尝试根据目录中的以下约定搜索一组程序集:
{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/