10

当我尝试将一些目录路径传递给 MSBuild 脚本时,如下所示:

MSBuild.exe myproj.proj /p:DirPath="C:\this\is\directory\"

在 .proj 文件中,我将其用作

<PropertyGroup>
  <FilePath>$(DirPath)file.txt</FilePath>
<PropertyGroup>

然后 MSBuild 组成FilePathc:\this\is\directory"file.txt. 如果我DirPath不带引号但带有斜杠 ( /p:DirPath=c:\this\is\directory\) 或不带斜杠但带有引号 ( /p:DirPath="c:\this\is\directory\") 则一切正常。

可以做些什么来允许使用斜杠(这会更方便)和引号(因为路径可以包含空格)传递目录路径?或者它是 MSBuild 中的一个错误,我应该使用一些解决方法,比如在将其传递到 msbuild 时删除尾随反斜杠?

4

1 回答 1

10

这是因为在命令行上设置属性的方式。由于最后一个 '\',MSBuild 将 " 添加到值的末尾,因此 " 将附加到字符串路径的末尾。

从命令行设置值时添加一个额外的 \ ,字符串将按预期为您附加反斜杠,或者不将 " 放在末尾。

MSBuild.exe myproj.proj /p:DirPath="C:\this\is\directory\\"

然后值为:C:\this\is\directory\file.txt

另一个解决方案是您可以将此功能放在您的 MSBuild 项目中以替换 " :

<PropertyGroup>
    <DirPath>$(DirPath.Replace('"',""))</DirPath>
</PropertyGroup>
于 2013-04-25T14:04:38.410 回答