我关注此博客:http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx
它在这个问题中与答案相关联:Web.Config transforms outside of Microsoft MSBuild?
每个步骤都按照描述工作,但我想从powershell脚本调用转换。
我想在powershell msbuild trans.proj /t:Demo
中执行此命令
我发现一些论坛说我应该使用invoke-expression
当我尝试时,我收到此错误
Powershell的:
Invoke-Expression $msbuild transformCommand.proj /t:Demo
结果
Invoke-Expression : Cannot bind argument to parameter 'Command' because it is null.
At D:/Somewhere
+ Invoke-Expression <<<< $msbuild transformCommand.proj /t:Demo
+ CategoryInfo : InvalidData: (:) [Invoke-Expression], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.InvokeExpre
ssionCommand
我也尝试过:
Invoke-Expression msbuild transformCommand.proj /t:Demo
结果
D:\Somewhere
Invoke-Expression : A positional parameter cannot be found that accepts argument 'transformCommand.proj'.
At D:\Redgate\Communited.Timeblockr.Api\PreDeploy1.ps1:14 char:18
+ Invoke-Expression <<<< msbuild transformCommand.proj /t:Demo
+ CategoryInfo : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand
小记:这是我第一次使用PowerShell。
TransformCommand.proj
<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<Target Name="Demo">
<TransformXml Source="Web.Test.config"
Transform="transform.xml"
Destination="Web.acceptatie.config"/>
</Target>
</Project>
我的问题是: 这可能吗?怎么可能呢?
编辑:
$a = "Path\transformCommand.proj /t:Demo"
#Invoke-Expression $msbuild $a
Start-Process -FilePath "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" -ArgumentList $a | Write-Host
这实际上做了我需要的一切......
如果有更多“独立”或更好的方法,请发布它。
答案 0 :(得分:8)
确保在调用Invoke-Expression $ msbuild之前定义PowerShell变量$ msbuild,如下所示
$msbuild = "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe"
答案 1 :(得分:1)
我最终执行以下操作来构建具有多个参数的解决方案
&$msbuildExe ('solution.sln','/verbosity:q','/p:configuration=Release','/t:Clean,Build')
if (!$?) {
echo "!!! ABORTING !!!";pause;exit
}