在基于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))" />