[英]How to Load .csproj file into .NET Core 3.0 using MSBuild NuGet
[英]How to build a csproj file using .net 2.0 MSBuild programmatically?
我正在使用 unity,所以我必须坚持使用 .net 2.0。 我已将以下文件从以下路径复制到我的 Assets/Editor 文件夹
Unity\\Editor\\Data\\Mono\\lib\\mono\\2.0\\
Microsoft.Build.Engine.dll
Microsoft.Build.Framework.dll
Microsoft.Build.Tasks.dll
Microsoft.Build.Utilities.dll
我试图弄清楚自己该怎么做,但网络上的大多数示例都使用较新的 MSBuild 版本,主要是 MSBuild 4.0 及更高版本。
我尝试了以下代码,但 msBuild.BuildEngine 为空。
MSBuild msBuild = new MSBuild ();
msBuild.BuildEngine.BuildProjectFile (csproj, new string[] { "Release" }, new Dictionary<string, string> (), new Dictionary<string, string> ());
msBuild.Execute ();
您正在实例化旨在从构建脚本中使用的MSBuild
任务。 在这种情况下,它从主机获取引擎,通常是 MSBuild 可执行文件。
您正在寻找在Microsoft.Build.BuildEngine
命名空间中找到并位于程序集 Microsoft.Build.Engine.dll 中的Engine
类。
以下演示控制台应用程序展示了如何使用该类。 我创建了一个MyBuild
类,它具有创建引擎和构建项目文件的所有逻辑。
class MyBuild
{
string _proj;
string _target;
bool _result;
public MyBuild(string proj, string target)
{
_proj = proj;
_target= target;
}
public bool Result {get{return _result;}}
public void Start()
{
Engine engine = new Engine();
engine.RegisterLogger(new ConsoleLogger());
_result = engine.BuildProjectFile(_proj, _target);
}
}
在 Main 方法中,我们进行了设置。 请注意,它还创建了一个线程并将其 ApparatmentState 设置为 STA。 在我的测试中,我在不这样做时没有发现任何问题,但警告相当持久,所以我假设存在如果不从此类线程运行它可能会中断的情况。 更安全然后抱歉。
using System;
using System.Threading;
using Microsoft.Build.BuildEngine;
public static void Main()
{
string proj= @"yourprogram.csproj";
string target = "Build";
MyBuild mybuild = new MyBuild(proj, target);
Thread t = new Thread(new ThreadStart(mybuild.Start));
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
if (mybuild.Result)
{
Console.WriteLine("Success!");
}
else
{
Console.WriteLine("Failed!");
}
}
要构建上面的代码,您必须将 Engine.dll 引用为 Framework.dll。
csc program.cs /r:C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\Microsoft.Build.Engine.dll /r:C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\Microsoft.Build .Framework.dll
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.