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 に答える