15

プロパティをMSBuildに渡そうとしています。プロパティは、セミコロンで区切られた値のリストです。この質問とは異なり、PowerShellからMSBuildを実行しています。

私は得る:

PS> msbuild .\Foo.sln /p:PackageSources="\\server\NuGet;E:\NuGet"

MSBUILD : error MSB1006: Property is not valid.
Switch: E:\NuGet

コマンドプロンプトから同じコマンドを実行すると、正常に機能します。PowerShellで機能させるにはどうすればよいですか?

4

3 に答える 3

22

パラメータを一重引用符で囲みます。

... '/p:PackageSources="\\Server\NuGet;E:\NuGet"'

PowerShell v3では、次のことを試してください。

msbuild .\Foo.sln --% /p:PackageSources="\\Server\NuGet;E:\NuGet"
于 2012-08-17T07:11:19.013 に答える
4

また、ASCII値を使用すると役立つ場合があります。

msbuild。\Foo.sln/ p:PackageSources = "\ Server \ NuGet%3BE:\ NuGet"

于 2017-05-30T10:39:16.500 に答える
-1

以下のVBScript関数を使用して、MSBuild.exeに渡されたプロパティ値を二重引用符 で囲むことができます。

    Function Escape(s)
      Escape = s

      Set objRegEx = CreateObject("VBScript.RegExp") 

      objRegEx.Global = True 
      objRegEx.Pattern = "(\\+)?"""

      Escape = objRegEx.Replace(Escape,"$1$1\""") 

      objRegEx.Pattern = "(\\+)$"

      Escape = objRegEx.Replace(Escape,"$1$1") 
    End Function

次の例は、Escape()関数の使用法を示しています

    Set objShell = WScript.CreateObject("WScript.Shell")        
    objShell.Run "msbuild.exe echo.targets /p:Param1=""" & Escape("ParamValue1") & """,Param2=""" & Escape("ParamValue1") & """", 1, True
于 2016-10-03T21:35:29.167 に答える