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

尝试添加" 前:

/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

对我来说,可行的解决方案是:

/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
> "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

尝试这个。

也可以通过 VSStudio GUI 尝试。然后复制设置并尝试使用 MS Build。

于 2009-06-29T08:13:27.083 回答
1

如果您在开关中有多个参数,则无法通过修复路径来真正“避免”问题。你可以做的是把你的参数切换在“ some_parameters1 some_parameters2 ”之间。

就像是:

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

当然,很大程度上取决于开关的语法,但这对我和我的团队有用。

于 2015-05-18T12:47:50.113 回答
0

要在使用 .proj 文件并且路径包含在 $(DeployFolder) 和 $(NuGetExe) 等属性中时执行此操作,您可以使用“&” 像这样:

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