当前位置:  开发笔记 > 后端 > 正文

如何在不生成msbuild.exe进程的情况下从Powershell运行MSBuild?

如何解决《如何在不生成msbuild.exe进程的情况下从Powershell运行MSBuild?》经验,为你挑选了2个好方法。



1> Milan Gardia..:

最简单的嵌入式构建调用工作和生成输出是:

[void][System.Reflection.Assembly]::Load('Microsoft.Build.Engine, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
$engine = New-Object Microsoft.Build.BuildEngine.Engine
$engine.RegisterLogger((New-Object Microsoft.Build.BuildEngine.ConsoleLogger))
$engine.BuildProjectFile('fullPath\some.proj')

然而,事实证明直接在Powershell(V1)中嵌入MSBuild是有问题的:

'MSBUILD : warning MSB4056: The MSBuild engine must be called on
a single-threaded-apartment. Current threading model is "MTA".
Proceeding, but some tasks may not function correctly.'

为什么我们为什么在管理环境中工作时仍然在2009年支付COM税?

我的结论是在Powershell(V1)中嵌入MSBuild并不是一个好主意.作为参考,我还包括我最终使用的基于流程的方法:

[void][System.Reflection.Assembly]::Load('Microsoft.Build.Utilities.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
$msbuild = [Microsoft.Build.Utilities.ToolLocationHelper]::GetPathToDotNetFrameworkFile("msbuild.exe", "VersionLatest")
&$msbuild fullPath\some.proj



2> EBGreen..:

我非常强烈建议看看PSake.

让我引用该页面的一部分:

请记住,psake是围绕PowerShell的语法糖.所以你可以在PowerShell中做任何事情,你可以用psake做.这意味着您可以运行MSBuild,NAnt或其他脚本.无需完全替换当前的构建系统.您可以使用psake自动化和扩展它!

psake会自动将适当版本的.NET Framework添加到其路径中.因此,您可以访问MSBuild,csc.exe,vbc.exe或$ env:windir\Microsoft.NET\Framework\$ version \中安装的任何其他工具,而无需完全限定的路径.


请不要进入关于'msbuild糟糕的哲学辩论,而是使用基于PowerShell的构建',因为这不是我的问题,真的.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有