首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在VS项目文件中转义$(SolutionDir)中的反斜杠?

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

Stack Overflow用户
提问于 2018-01-30 05:17:28
回答 2查看 2.2K关注 0票数 2

我正试图为一个C#项目编写一个构建后事件。我正在使用一个自定义控制台应用程序(myTool.exe)来实现这一点。

例如,生成后事件是

$(SolutionDir)tools\myTool.exe "$(SolutionDir)myProject\bin\“调试

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

在逃跑之前,$(SolutionDir)D:\Some\MySystem\。在逃逸之后,它应该变成D:\\Some\\MySystem\\

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

我试过使用这种方法,但它似乎不适用于$(SolutionDir)

代码语言:javascript
复制
<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>

PS:关于为什么我必须替换反斜杠,请参见

EN

回答 2

Stack Overflow用户

发布于 2018-01-30 06:45:46

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

不确定为什么要将$(SolutionDir)中的"\“替换为"\”。因为这个属性是用于生成命令和属性的通用宏,所以可以在项目的属性页对话框中的任何地方使用这些宏,其中字符串被接受为

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

因此,脚本应该是:

代码语言:javascript
复制
  <PropertyGroup>
    <EscapedSolutionDir>$(SolutionDir.Replace('\', '\\'))</EscapedSolutionDir>
    <EscapedTargetDir>$(TargetDir.Replace('\', '\\'))</EscapedTargetDir>
  </PropertyGroup>

然后我使用一个目标输出EscapedSolutionDirEscapedTargetDir中的转义值,这两个值都被转义了:

代码语言:javascript
复制
  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Message Text="$(EscapedSolutionDir)" Importance="high">
    </Message>
    <Message Text="$(EscapedTargetDir)" Importance="high">
    </Message>
  </Target>

产出:

票数 2
EN

Stack Overflow用户

发布于 2022-02-02 15:28:13

注意一些周围的Vars以反斜杠结束..。加一个“。”然后当使用它们时,添加"\“,例如,我试图获得一个带有文件路径和名称的meesage (#杂注消息).

我这样做: INT_DIR=$(IntDir.Replace('',‘\’).;%(PreprocessorDefinitions))

然后

#定义MyFile "File.ext“

#务实消息( TO_STR(INT_DIR) "\“MyFile "(0):消息:文件包含”)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48514341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档