【问题标题】:Remove trailing backslash from msbuild batching Directory property从 msbuild 批处理目录属性中删除尾随反斜杠
【发布时间】:2011-03-16 06:55:57
【问题描述】:

我正在尝试让 msbuild 脚本中的 exec 任务正常工作,但发现了一个非常烦人的问题。除了我正在运行的进程 (Ncover.Console.exe) 无法处理目录名称末尾的反斜杠之外,exec 命令很不错。

为了举例说明,以下工作:

<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 c:\out\" />

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

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

所以我的问题是如何删除这个讨厌的尾随反斜杠?

提前致谢。

【问题讨论】:

  • 您可以使用批处理,但仍然可以使用转换或属性函数删除反斜杠。你有什么特别的理由不想使用这些吗?
  • 嗨,阿米尔。您能否演示一下在我的情况下如何使用转换或属性函数?请使用回复按钮,以便我将答案归功于您,您的回复会出现在搜索结果中。谢谢。
  • 在 Danere 的回答中,您可以看到如何使用 property functions 执行此操作的示例。 (transforms 可能无法实现,因为您只能在此处添加字符)

标签: msbuild


【解决方案1】:

如果您使用的是 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;" />

【讨论】:

  • 你好丹妮尔。不幸的是,我们使用的 msbuild 3.5 不允许使用属性函数。你能想到任何其他方法来做到这一点吗?我调查了 MSBuildHelper 类但无济于事 - 也许我必须编写自定义任务或尝试使用 msbuild 社区任务 RegexReplace 函数。
  • 仅供参考,我的解决方案是用静态属性完全替换命令的那部分。接下来我会考虑使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2011-02-26
  • 2019-05-07
  • 2013-04-30
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多