簡體   English   中英

如何以編程方式使用 .net 2.0 MSBuild 構建 csproj 文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM