微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

参数化值会导致Powershell / msbuild命令出错

如何解决参数化值会导致Powershell / msbuild命令出错

我有一个Powershell脚本,该脚本依次调用msbuild.exe并使用解决方案值和parameters参数运行它。如果我通过手动编写该行来运行此脚本,则它将按预期运行并构建解决方案,但是,由于该脚本旨在构建多个解决方案,因此参数,解决方文件路径和msbuild路径都作为变量传递

我需要运行的行如下所示:

& 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe' FooBar.sln "/t:rebuild" /p:PlatformTarget=Anycpu /p:Configuration=Release /p:DeployOnBuild=true /p:CustomizablePublishDir=true /p:OutDir=F:\agent\_work\1\s\Deploy.Temp\Foo.Bar.Binaries\\ | Out-Host 

将其拆分为变量的方式如下:

$1 = 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe'
$2 = 'FooBar.sln'
$3 = "/t:rebuild /p:PlatformTarget=Anycpu /p:Configuration=Release /p:DeployOnBuild=true /p:CustomizablePublishDir=true /p:OutDir=F:\agent\_work\1\s\Deploy.Temp\Foo.Bar.Binaries\\ | Out-Host"


& $1 $2 $3

对于上下文,要获取这些值,我们使用XML,其中包含许多节点,每个节点具有3个属性

运行参数化脚本时出现的错误如下:

Unhandled Exception: System.ArgumentException: The name "Foo_Bar:PlatformTarget=Anycpu /p:Configuration=Release /p:DeployOnBuild=true /p:CustomizablePublishDir=true /p:OutDir=F:\agent\_work\1\s\Deploy.Temp\Foo.bar.Binaries\\ | Out-Host" contains 
an invalid character ".".

显然,这是由于powershell如何处理字符串,但我不知道如何使其工作。

解决方法

| Out-Host应该作为参数传递给应用程序-但这不是问题。

这似乎是将所有命令行开关组合在一个字符串中,并在所述参数中的任意位置包含.的组合-如果我将字符串拆分成单独的部分或将您的OutDir参数替换为一个不包含任何.msbuild的路径来尝试构建项目:

$msbuild = 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe'
$solution = 'FooBar.sln'
$arguments = "/t:rebuild /p:PlatformTarget=AnyCPU /p:Configuration=Release /p:DeployOnBuild=true /p:CustomizablePublishDir=true /p:OutDir=F:\agent\_work\1\s\Deploy.Temp\Foo.Bar.Binaries"

&$msbuild $solution $arguments.Split(' ') |Out-Host

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。