21

コマンドラインからMSBuildを呼び出そうとしています。スペースのないパスを使用していたときはすべて正常に機能していましたが、スペースのあるパスがあり、コマンドが失敗します。

コマンド(動作):

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutDir=c:\temp\deploy\funAndGames\Deployment\bin\ 
/p:WebProjectOutputDir=c:\temp\deploy\funAndGames\Deployment\ 
/p:Configuration=Release

次に、引用符を追加し、OutDirをOutPathに変更しました(機能しません)。

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\funAndGames\Deployment\bin\" 
/p:WebProjectOutputDir="c:\temp\deploy\funAndGames\Deployment\" 
/p:Configuration=Release

私が目指しているのは次のようなものです(機能しません):

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\fun and games\Deployment\bin\" 
/p:WebProjectOutputDir="c:\temp\deploy\fun and games\Deployment\" 
/p:Configuration=Release

スペースを含むOutDir/OutPathおよびWebProjectOutputDirの構文に関するヘルプはありますか?出来ますか?そうでない場合は、理由が何であるかを誰も知りません(一部のURLにはスペースタイプのものがないためですか?)

4

7 に答える 7

23

ちょうどこれがこの古い質問への答えを見つけました。スペースを処理するには、すべてのフォルダーでエスケープ文字\を使用する必要があります。基本的に

/p:OutPath="c:\temp\deploy\fun and games\Deployment\bin\"

する必要があります

/p:OutPath="c:\\temp\\deploy\\fun and games\\Deployment\\bin\\"

そして魔法のようにそれは機能します!

于 2009-11-03T17:55:12.507 に答える
5

" exを追加してみてください:

/p:OutPath=""c:\temp\deploy\fun and games\Deployment\bin\""
于 2011-11-28T08:04:11.177 に答える
4

引用符を使用しているときに\を/に切り替えると、MsbuildはOutDirのスペースでも機能するようです。

/p:OutDir="c:/temp/deploy/fun and games/out/"
/p:WebProjectOutputDir="c:/temp/deploy/fun and games/Deployment/"
于 2011-03-16T16:14:12.793 に答える
1
> "C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe"
> /t:Rebuild
> "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\funAndGames\Deployment\bin\"
----------------------------------------
/p:WebProjectOutputDir="c:\temp\deploy\fun and games\Deployment\"
----------------------------------------

> /p:Configuration=Release

これを試して。

また、VSStudioGUIを介して試してください。次に、設定をコピーして、MSBuildを試してください。

于 2009-06-29T08:13:27.083 に答える
1

私にとって実用的な解決策は次のとおりです。

/ p:SQLCMD = "\" C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE \ ""

言い換えると、すべての文字列を引用符で囲みます(外部引用符は値としてMSBuildに渡されません)。

このプロパティのMSBuild内の値は、「C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE」(引用符付き)です。

于 2014-05-12T19:50:07.940 に答える
1

スイッチに複数のパラメータがある場合、パスを修正して問題を実際に「回避」することはできません。あなたができることは、スイッチのパラメータを「some_parameters1some_parameters2」の間に置くことです。

何かのようなもの:

<Exec Command="SomeCommand /useMultipleParameterSwitch=&quot;value1:blabla1 | value2:blabla2&quot;"/>

もちろん、スイッチの構文に大きく依存しますが、それは私と私のチームにとってはうまくいきます。

于 2015-05-18T12:47:50.113 に答える
0

.projファイルを使用し、パスが$(DeployFolder)や$(NuGetExe)などのプロパティに含まれている場合にこれを行うには、「&quot;」を使用できます。このような:

<Exec Command="&quot;$(NuGetExe)&quot; pack -OutputDirectory &quot;$(DeployFolder)&quot;" />
于 2015-08-10T22:28:46.837 に答える