首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >间隔路径、msbuild和psake

间隔路径、msbuild和psake
EN

Stack Overflow用户
提问于 2012-04-18 16:47:20
回答 1查看 972关注 0票数 1

相关问题here

这对于编译mvc3应用程序来说是正确的。

代码语言:javascript
运行
复制
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:\Projects\移到C:\Users\ASDFG1 1\Documents\Visual 2010\Projects),msbuild认为存在多个项目文件。这是有道理的,但我必须遗漏一些东西,把一个被解析的变量放入引号应该不会那么难。

变量尝试了

代码语言:javascript
运行
复制
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 }
EN

Stack Overflow用户

发布于 2012-06-23 21:50:28

使用EchoArgs.exe再现问题时,我们看到引号没有按需要传递给可执行文件:

代码语言:javascript
运行
复制
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>

使用来自this answer的反斜杠转义选项,我们可以保留变量展开和包含的引号:

代码语言:javascript
运行
复制
PS> ./echoargs /p:WebProjectOutputDir=\`"$publish_dir\`"
Arg 0 is </p:WebProjectOutputDir="C:\Users\Documents\Visual Studio 2010\Projects">

在这里,反标记告诉PowerShell将引号字符视为文字值,反斜杠告诉调用调用以保留引号。

或者,我们可以通过预先计算完整的参数来保持一个级别的转义,而不是内联$publish_dir变量:

代码语言:javascript
运行
复制
PS> $publishArg = '/p:WebProjectOutputDir=\"{0}\"' -f $publish_dir
PS> ./echoargs $publishArg
Arg 0 is </p:WebProjectOutputDir="C:\Users\Documents\Visual Studio 2010\Projects">
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10214080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档