我有GNU makefile
我正在翻译为MSBuild
。
有一个包含sed
的命令无法在MSBuild
中运行,因为它包含一个'
(单引号),它干扰了应该关闭{的单引号{1}} Command
任务的属性:
Exec
当我运行它时,Visual Studio会说
错误MSB4025:无法加载项目文件。 's'是一个意想不到的标记。期待白色空间。第244行,第25位。
当我将<Target Name="prebuild_cat">
<Exec
EchoOff="true"
StandardOutputImportance="low"
StandardErrorImportance="low"
IgnoreExitCode="true"
ConsoleToMSBuild="true"
Command=' $(GnuSed) 's/^Q(.*)/"&"/'
'>
</Exec>
</Target>
替换为'
而'
替换为"
"
错误MSB4025:无法加载项目文件。解析EntityName时发生错误。
答案 0 :(得分:1)
msbuild - sed命令错误 - 如何包含单引号和双引号
根据文件MSBuild Special Characters:
MSBuild保留一些特定用于特定环境的字符。如果你想在它们被保留的上下文中逐字地使用它们,你只需要转义这些字符。
要转义特殊字符,请使用语法%xx,其中xx表示字符的ASCII十六进制值。
在这种情况下,单引号是ASCII字符39,其中十六进制为27。和&amp;的价值是26,所以正确的转义序列是:
'$(GnuSed) %27s/^Q(.*)/"%26"/%27'
以下是我的测试样本,您可以检查它是否适合您:
<Target Name="prebuild_cat" AfterTargets="Build">
<Message Text='$(GnuSed) %27s/^Q(.*)/"%26"/%27' Importance='high' />
</Target>
输出窗口中的结果:
1>prebuild_cat:
1> 's/^Q(.*)/"&"/'
1>
1>Build succeeded.