在基于MSBuild/约定的文件名生成中删除尾随斜杠

在基于MSBuild/约定的文件名生成中删除尾随斜杠,msbuild,conventions,convention-over-configur,itemgroup,Msbuild,Conventions,Convention Over Configur,Itemgroup,我试图在目录中根据以下约定搜索一组程序集: {SubDirName}\{SubDirName}.dll 我首先创建了一个MSBuild项目组[在.RecursiveDir部分批处理另一个项目组] <AllAssemblies Include="$(SourceDirectory)\**\Test.*.dll" /> <Dirs Include="@(AllAssemblies->'%(RecursiveDir)')"/> 现在,我想从这个列表中生成一组文件名 问

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

{SubDirName}\{SubDirName}.dll
我首先创建了一个MSBuild项目组[在.RecursiveDir部分批处理另一个项目组]

<AllAssemblies Include="$(SourceDirectory)\**\Test.*.dll" />
<Dirs Include="@(AllAssemblies->'%(RecursiveDir)')"/>
现在,我想从这个列表中生成一组文件名

问题在于:

<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" />
我不希望斜杠在
.dll
中的句点之前

实现这一目标最干净的方法是什么

我知道有一个HasTrailingSlash表达式操作符,但在OOTB任务?中没有RemoveTrailingSlash任务的迹象?。我对所需的MSBuild版本并不挑剔。

您试过了吗

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

您可以使用.NET 4.0中对MSBuild的.NET方法的支持,将最终结果中的
“\.”
s替换为“.”


(这至少可以解决我原来的问题)

谢谢你。不幸的是,该值后面有一个斜杠(因为它来自RecursiveDir),我想将它嵌入到文件名中(我在dir位之间得到了两个反斜杠,你的补救方法可以解决这个问题——但当然这被默默忽略了——记住这不是为了美观,因为它不起作用!)。
<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" />
SubDir1\\SubDir1\.dll;SubDir2\\SubDir2\.dll;SubDir3\\SubDir3\.dll
<AssembliesByConvention Include="@(Dirs -> '%(Identity)%(Identity).dll')" Condition="HasTrailingSlash(%(Identity))" />
<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" Condition="!HasTrailingSlash(%(Identity))" />