的分离路径,MSBuild的,和psake(Spaced paths, msbuild, and p

2019-10-16 14:30发布

相关问题在这里 。

这工作正常编译的应用MVC3。

task Compile 
{
    $config = $script:siteConfig.config

    exec { & "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" $webproject_path `
    /p:Configuration=$config /p:WebProjectOutputDir="$publish_dir" `
    /p:Outdir="$out_dir" /p:CleanWebProjectOutputDir=False `
    /T:_WPPCopyWebApplication /T:ResolveReferences /verbosity:quiet /nologo }
}

所有这些路径变量是脚本属性。 然而,当空间在这些计算路径引入(如该项目由C感动:\项目\到C:\用户\ ASDFG1 \文档\ Visual Studio 2010的\项目)的MSBuild认为有多个项目文件。 这是有道理的,但我必须失去了一些东西,得到一个解析可变进行情不应该这么难。

尝试变化

exec { Invoke-Expression "& C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe '$webproject_path' /p:Configuration=$config /p:WebProjectOutputDir='$publish_dir' /p:Outdir='$out_dir' /p:CleanWebProjectOutputDir=False /T:_WPPCopyWebApplication /T:ResolveReferences /verbosity:quiet /nologo" }

exec { C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "`"$webproject_path`"" `
/p:Configuration=$config /p:WebProjectOutputDir="`"$publish_dir`"" `
/p:Outdir="`"$out_dir`"" /p:CleanWebProjectOutputDir=False `
/T:_WPPCopyWebApplication /T:ResolveReferences /verbosity:quiet /nologo }

Answer 1:

使用EchoArgs.exe重现该问题,我们看到的报价没有被传递到可执行文件根据需要:

PS> $publish_dir = 'C:\Users\Documents\Visual Studio 2010\Projects'
PS> ./echoargs /p:WebProjectOutputDir="$publish_dir"
Arg 0 is </p:WebProjectOutputDir=C:\Users\Documents\Visual Studio 2010\Projects>

PS> ./echoargs /p:WebProjectOutputDir="`"$publish_dir`""
Arg 0 is </p:WebProjectOutputDir=C:\Users\Documents\Visual>
Arg 1 is <Studio>
Arg 2 is <2010\Projects>


从使用反斜杠逃逸选择这个答案 ,我们可以保存变量扩展和封闭的报价:

PS> ./echoargs /p:WebProjectOutputDir=\`"$publish_dir\`"
Arg 0 is </p:WebProjectOutputDir="C:\Users\Documents\Visual Studio 2010\Projects">

在这里,反引号告诉PowerShell来对待引号字符为文字值,和反斜线告诉调用调用保存的报价。


另外,我们也坚持通过事先评估的充分论证,而不是内联逃逸的单级$publish_dir变量:

PS> $publishArg = '/p:WebProjectOutputDir=\"{0}\"' -f $publish_dir
PS> ./echoargs $publishArg
Arg 0 is </p:WebProjectOutputDir="C:\Users\Documents\Visual Studio 2010\Projects">


文章来源: Spaced paths, msbuild, and psake