我正试图为一个C#项目编写一个构建后事件。我正在使用一个自定义控制台应用程序(myTool.exe)来实现这一点。
例如,生成后事件是
$(SolutionDir)tools\myTool.exe "$(SolutionDir)myProject\bin\“调试
(所有路径都引用,因为它们可能包含空白空间。)
在逃跑之前,$(SolutionDir)是D:\Some\MySystem\。在逃逸之后,它应该变成D:\\Some\\MySystem\\。
如何以这种方式在csproj文件中转义$(SolutionDir)中的所有$(SolutionDir)?
我试过使用这种方法,但它似乎不适用于$(SolutionDir)
<PropertyGroup>
<EscapedSolutionDir>$(SolutionDir.Replace('\\', '\\\\'))</EscapedSolutionDir>
<EscapedTargetDir>$(TargetDir.Replace('\\', '\\\\'))</EscapedTargetDir>
</PropertyGroup>
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command=""$(EscapedSolutionDir)source\\Native\\Output\\NativeLibraryCopier.exe" "$(EscapedSolutionDir)" "$(ConfigurationName)" "$(PlatformName)" "$(TargetDir)"" />
</Target>PS:关于为什么我必须替换反斜杠,请参见这。
发布于 2018-01-30 06:45:46
如何在VS项目文件中转义$(SolutionDir)中的反斜杠?
不确定为什么要将$(SolutionDir)中的"\“替换为"\”。因为这个属性是用于生成命令和属性的通用宏,所以可以在项目的属性页对话框中的任何地方使用这些宏,其中字符串被接受为。
但是,如果您坚持要替换它,则应该用$(SolutionDir.Replace('\', '\\'))而不是$(SolutionDir.Replace('\\', '\\\\'))来替换它。因为$(SolutionDir)中的路径是D:\Some\MySystem\,所以只有一个反斜杠。当您用双反斜杠替换它时,MSBuild在$(SolutionDir)中找不到双反斜杠。
因此,脚本应该是:
<PropertyGroup>
<EscapedSolutionDir>$(SolutionDir.Replace('\', '\\'))</EscapedSolutionDir>
<EscapedTargetDir>$(TargetDir.Replace('\', '\\'))</EscapedTargetDir>
</PropertyGroup>然后我使用一个目标输出EscapedSolutionDir和EscapedTargetDir中的转义值,这两个值都被转义了:
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Message Text="$(EscapedSolutionDir)" Importance="high">
</Message>
<Message Text="$(EscapedTargetDir)" Importance="high">
</Message>
</Target>产出:

发布于 2022-02-02 15:28:13
注意一些周围的Vars以反斜杠结束..。加一个“。”然后当使用它们时,添加"\“,例如,我试图获得一个带有文件路径和名称的meesage (#杂注消息).
我这样做: INT_DIR=$(IntDir.Replace('',‘\’).;%(PreprocessorDefinitions))
然后
#定义MyFile "File.ext“
#务实消息( TO_STR(INT_DIR) "\“MyFile "(0):消息:文件包含”)
https://stackoverflow.com/questions/48514341
复制相似问题