Properties 如何将带空格和尾随反斜杠的路径作为属性传递给MSBuild

Properties 如何将带空格和尾随反斜杠的路径作为属性传递给MSBuild,properties,msbuild,Properties,Msbuild,当我尝试将某些目录路径传递到MSBuild脚本时,如下所示: MSBuild.exe myproj.proj /p:DirPath="C:\this\is\directory\" 在.proj文件中,我使用它作为 <PropertyGroup> <FilePath>$(DirPath)file.txt</FilePath> <PropertyGroup> $(DirPath)file.txt 然后,MSBuild将FilePath组合为

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

MSBuild.exe myproj.proj /p:DirPath="C:\this\is\directory\"
在.proj文件中,我使用它作为

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

$(DirPath)file.txt
然后,MSBuild将
FilePath
组合为
c:\this\is\directory”file.txt
。如果我传递
DirPath
时不带引号,但带尾随斜杠(
/p:DirPath=c:\this\directory\
),或者不带尾随斜杠,但带引号(
/p:DirPath=“c:\this\is\directory\”
),则一切正常


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

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

在命令行中设置值时,添加一个额外的\字符串,该字符串将按预期为您添加反斜杠,或者不在末尾添加“反斜杠”

MSBuild.exe myproj.proj /p:DirPath="C:\this\is\directory\\"
然后,值为:C:\this\is\directory\file.txt

另一个解决方案是,您可以将此函数放在MSBuild项目中,以替换:


$(DirPath.Replace(“,”))

您尝试过单引号吗?@leppie此属性是由生成脚本和连续集成工具(伪生成工具)传递的,因此我在这里没有任何选项。IMO的第一个解决方案并不方便,当所有其他反斜杠传递给一个反斜杠时,传递两个反斜杠很奇怪。第二种解决方案在这种形式下不起作用,因此MSBuild中的属性排序是不可变的,即,您不能重写通过/p:propname=propvalue传递的属性,您必须定义新属性,如
$(DirPath.Replace(“,”))
。我决定修剪尾随的反斜杠并将其附加到.proj文件中。我只想指出这不是msbuild错误。它正在执行您要求它执行的操作。在该属性值的末尾附加一个“a”。这是因为您正在使用尾随\设置值,该值告诉Msbuild应该包含下一个字符。在这种情况下,它是一个“。通常,您不会在目录属性值上加上任何尾随的反斜杠。我不知道为什么您认为该解决方案是奇怪的,因为在这种情况下,您如何正确地设置一个目录变量,并将一个所需的‘\’附加到该值中。
<PropertyGroup>
    <DirPath>$(DirPath.Replace('"',""))</DirPath>
</PropertyGroup>