从msbuild批处理目录属性中删除尾部反斜杠

从msbuild批处理目录属性中删除尾部反斜杠,msbuild,Msbuild,我试图让msbuild脚本中的exec任务正常工作,但发现了一个非常恼人的问题。exec命令是甜美的,只是我正在运行的进程(Ncover.Console.exe)不能处理目录名末尾的反斜杠 为了用一个截取的示例进行说明,以下方法有效: <exec command="NCover.Console.exe nunit-console.exe some.dll [snip] //w c:\out" /> 但这失败了(请注意“c:\out”末尾的斜杠): 我不能简单地删除尾随的反斜

我试图让msbuild脚本中的exec任务正常工作,但发现了一个非常恼人的问题。exec命令是甜美的,只是我正在运行的进程(Ncover.Console.exe)不能处理目录名末尾的反斜杠

为了用一个截取的示例进行说明,以下方法有效:

<exec command="NCover.Console.exe nunit-console.exe some.dll [snip] //w c:\out" />

但这失败了(请注意“c:\out”末尾的斜杠):


我不能简单地删除尾随的反斜杠的原因是该值是使用批处理读取的。因此,在与上面相同的剪接中,它实际上看起来是这样的:

<exec command="NCover.Console.exe nunit-console.exe some.dll [snip] //w 
&quot;%(TestAssemblies.RootDir)%(TestAssemblies.Directory)&quot; />

如果您使用的是MSBuild 4.0,则可以使用Amir指出的属性函数,如下所示:

<PropertyGroup>
  <TestAssembliesDirectory>%(TestAssemblies.Directory)</TestAssembliesDirectory>
</PropertyGroup>
<exec command="NCover.Console.exe nunit-console.exe some.dll [snip] //w &quot;%(TestAssemblies.RootDir)$(TestAssembliesDirectory.TrimEnd('\'))&quot;" />

%(TestAssemblies.Directory)

您可以使用批处理,但仍然可以使用转换或属性函数删除反斜杠。你有什么特别的理由不想用这些吗?嗨,阿米尔。你能演示一下在我的例子中如何使用转换或属性函数吗?请使用“答复”按钮,这样我可以将答案记入您的帐户,您的答复将显示在搜索结果中。谢谢。在Danere的回答中,您可以看到一个如何使用的示例。(可能无法使用,因为您只能在此处添加字符)嗨,Danere。不幸的是,我们使用的是不允许属性函数的msbuild 3.5。你能想出其他的方法吗?我已经研究了MSBuildHelper类,但没有结果-也许我必须编写一个自定义任务或使用msbuild社区任务RegexReplace函数进行实验。仅供参考,我的解决方案是将命令的该部分全部替换为静态属性。接下来,我会考虑使用任务、自定义任务或社区任务。无论如何,谢谢Danere和Amir的建议。
<PropertyGroup>
  <TestAssembliesDirectory>%(TestAssemblies.Directory)</TestAssembliesDirectory>
</PropertyGroup>
<exec command="NCover.Console.exe nunit-console.exe some.dll [snip] //w &quot;%(TestAssemblies.RootDir)$(TestAssembliesDirectory.TrimEnd('\'))&quot;" />