gpt4 book ai didi

c# - 如何在 VS 项目文件中转义 $(SolutionDir) 中的反斜杠?

转载 作者:行者123 更新时间:2023-11-30 23:05:54 26 4
gpt4 key购买 nike

我正在尝试为 C# 项目编写构建后事件。我正在使用自定义控制台应用程序 (myTool.exe) 来执行此操作。

例如构建后事件是

"$(SolutionDir)tools\myTool.exe" "$(SolutionDir)myProject\bin\" Debug

(所有路径都被引用,因为它们可能包含空格。)

在转义之前,$(SolutionDir)D:\Some\MySystem\。转义后应该变成D:\\Some\\MySystem\\

如何在csproj文件中以这种方式转义$(SolutionDir)中的所有\

我试过使用this approach ,但它似乎不适用于 $(SolutionDir):

<PropertyGroup>
<EscapedSolutionDir>$(SolutionDir.Replace('\\', '\\\\'))</EscapedSolutionDir>
<EscapedTargetDir>$(TargetDir.Replace('\\', '\\\\'))</EscapedTargetDir>
</PropertyGroup>
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="&quot;$(EscapedSolutionDir)source\\Native\\Output\\NativeLibraryCopier.exe&quot; &quot;$(EscapedSolutionDir)&quot; &quot;$(ConfigurationName)&quot; &quot;$(PlatformName)&quot; &quot;$(TargetDir)&quot;" />
</Target>

附注:参见 this为什么我必须替换反斜杠。

最佳答案

How to escape backslash in $(SolutionDir) in a VS project file?

不确定为什么要将 $(SolutionDir) 中的“\”替换为“\\”。那是因为这个属性是 common macros for build commands and properties , 您可以在接受字符串的项目属性页对话框中的任何位置使用这些宏

但是如果你坚持要替换它,你应该用$(SolutionDir.Replace('\', '\\'))而不是$(SolutionDir.Replace( '\\', '\\\\'))。因为$(SolutionDir)中的路径是D:\Some\MySystem\只有一个反斜杠。当您将其替换为双反斜杠时,MSBuild 无法在 $(SolutionDir) 中找到双反斜杠。

所以脚本应该是:

  <PropertyGroup>
<EscapedSolutionDir>$(SolutionDir.Replace('\', '\\'))</EscapedSolutionDir>
<EscapedTargetDir>$(TargetDir.Replace('\', '\\'))</EscapedTargetDir>
</PropertyGroup>

然后我使用目标在 EscapedSolutionDirEscapedTargetDir 中输出转义值,这两个值都已转义:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Message Text="$(EscapedSolutionDir)" Importance="high">
</Message>
<Message Text="$(EscapedTargetDir)" Importance="high">
</Message>
</Target>

输出:

enter image description here

关于c# - 如何在 VS 项目文件中转义 $(SolutionDir) 中的反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48514341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com