日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

build 之前执行task_浅谈VS编译自定义编译任务—MSBuild Task(csproject)-阿里云开发者社区...

發布時間:2025/3/11 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 build 之前执行task_浅谈VS编译自定义编译任务—MSBuild Task(csproject)-阿里云开发者社区... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上一篇淺談.NET編譯時注入(C#-->IL)中我們簡單的反編譯查看了幾種c#語法糖和PostSharp在編譯成IL時為我做的MSIL注入。緊接著在這節,要來看的就是MSBuild Task。在我們的代碼預編譯過程中我們可以創建我們自己的任務Task。下面我們就開始做一個簡單的Task。

1:首先需要添加Microsoft.Build.Utilities.v3.5.dll和Microsoft.Build.Framework.dll中引用。在Microsoft.Build.Framework中為我們定義了接口ITask,自定義任務需要去實現這個契約。其定義如下:

publicinterface?ITask

{

IBuildEngine?BuildEngine?{?get;set;?}

ITaskHost?HostObject?{?get;set;?}

boolExecute();

}

IBuildEngine 從字義上說是編譯引擎,他主要承載了我們的編譯生成時的信息和消息,警告,錯誤等事件注冊。而Execute這是我們Task執行體。HostObject 任務關聯宿主信息。

在Microsoft.Build.Utilities下Task為我們實現了基本的ITask信息。我們可以從這里繼承開始。

下面是一個簡單的實現:

using?System;

using?System.Collections.Generic;

using?System.Linq;

using?System.Text;

namespace?FirstBuildTask

{

publicclass?MyBuildTask?:?Microsoft.Build.Utilities.Task

{

private?string?outputFile;

[Microsoft.Build.Framework.Required]

publicstring?OutputFile

{

get?{returnoutputFile;?}

set{?outputFile?=?value;?}

}

publicoverride?boolExecute()

{

Log.LogWarning("test?message:"+?this.outputFile);

returntrue;

}

}

}

下面我們需要關聯Task,本人不喜歡污染,所以加到csproject(也可全局所有項目使用)。

下面我們創建一個簡單的控制臺

程序

using?System;

using?System.Collections.Generic;

using?System.Linq;

using?System.Text;

namespace?BlogSample

{

class?Program

{

staticvoid?Main(string[]?args)

{

Console.WriteLine("ok");

Console.Read();

}

}

}

用記事本形式打開csproject文件:

添加我們的Task聲明和任務。(xml標記含義將在后續,這里先看看效果。)

聲明Task:

添加任務:

修改后的csproject文件形如:

上邊紅線注釋的就是我們的Task所做的警告和輸出路徑的提示。

我們已經完成了一個簡單Task,但還遺留這MsBuild配置,下面將簡單的描述。

1:UsingTask:定義:

屬性

說明

AssemblyName

AssemblyName?或?AssemblyFile?屬性是必需的。

要加載的程序集的名稱。盡管?AssemblyName?屬性不是必需的,但它接受強名稱程序集。使用此屬性等效于通過 .NET Framework 中的?Load?方法加載程序集。

如果使用了?AssemblyFile?屬性,便不能使用此屬性。

AssemblyFile

AssemblyName?或?AssemblyFile?屬性是必需的。

程序集的文件路徑。此屬性既接受完整路徑,也接受相對路徑。相對路徑是相對于當前項目目錄的路徑。使用此屬性等效于通過 .NET Framework 中的?LoadFrom?方法加載程序集。

如果使用了?AssemblyName?屬性,便不能使用此屬性。

TaskName

必選的屬性。

要從程序集中引用的任務的名稱。如果可能存在多義性,則此屬性應該始終指定完整的命名空間。如果存在多義性,MSBuild 將選擇任意匹配方式,該匹配方式可能產生意外的結果。

Condition

可選的屬性。

要計算的條件。有關更多信息,請參見?MSBuild 條件。

在系統中為我們定義了很多Task,有:

AL(程序集鏈接器)任務:描述?AL?任務及其參數。

AspNetCompiler 任務:包裝 aspnet_compiler.exe,它是預編譯 ASP.NET 應用程序的實用工具。

Copy 任務:描述?Copy?任務及其參數。

CreateItem 任務:描述?CreateItem?任務及其參數。

CreateProperty 任務:描述?CreateProperty?任務及其參數。

Csc 任務:描述?Csc?任務及其參數。

Delete 任務:描述?Delete?任務及其參數。

Error 元素 (MSBuild):根據計算的條件語句停止生成操作并記錄錯誤。

Exec 任務:描述?Exec?任務及其參數。

FindUnderPath 任務:確定指定項集合中的哪些項存在于指定的文件夾及其所有子文件夾中。

GenerateApplicationManifest 任務:描述?GenerateApplicationManifest?任務及其參數。

GenerateBootstrapper 任務:提供一種自動化方式來檢測、下載和安裝應用程序及其必備組件。

GenerateDeploymentManifest 任務:描述?GenerateDeployManifest?任務及其參數。

GenerateResource 任務:將 .txt 和 .resx 文件轉換為公共語言運行庫二進制 .resources 文件。

GetAssemblyIdentity 任務:從指定的文件檢索程序集標識并輸出標識信息。

GetFrameworkPath 任務:檢索 .NET Framework 程序集的路徑。

GetFrameworkSdkPath 任務:檢索 .NET Framework SDK 的路徑。

LC 任務:描述?LC?任務及其參數。

MakeDir 任務:描述?MakeDir?任務及其參數。

MSBuild 任務:描述 MSBuild 任務及其參數。

RegisterAssembly 任務:描述?RegisterAssembly?任務及其參數。

RemoveDir 任務:描述?RemoveDir?任務及其參數。

ResGen 任務:描述?ResGen?任務及其參數。

ResolveAssemblyReference 任務:描述?ResolveAssemblyReference?任務及其參數。

ResolveComReference 任務:描述?ResolveCOMReference?任務及其參數。

SGen 任務:為指定程序集中的類型創建一個 XML 序列化程序集。

SignFile 任務:使用指定證書對指定文件進行簽名。

Touch 任務:描述?Touch?任務及其參數。

UnregisterAssembly 任務:描述?UnregisterAssembly?任務及其參數。

Vbc 任務”描述?Vbc?任務及其參數。

VCBuild 任務“描述?VCBuild?任務及其參數。

Warning 元素 (MSBuild):根據計算的條件語句在生成期間記錄警告。

2:Target:定義

...

描述了我們的目標:可以包含0個多個任務。

屬性

屬性

說明

Name

必選的屬性。

目標的名稱。

DependsOnTargets

可選的屬性。

在執行此目標或者進行頂級依賴項分析之前必須執行的目標。多個目標之間用分號分隔。

Inputs

可選的屬性。

此目標的項輸入。此屬性中的項用作頂級依賴項分析中的輸入。

Outputs

可選的屬性。

此目標的預期輸出。可以通過對輸入項應用轉換來生成輸出項。有關轉換的更多信息,請參見?MSBuild 轉換。

Condition

可選的屬性。

要計算的條件。如果條件的計算結果為?false,目標將不會執行該目標的體或者在?DependsOnTargets?屬性中設置的任何目標的體。有關條件的更多信息,請參見?MSBuild

參考文獻:

本文轉自 破狼 51CTO博客,原文鏈接:http://blog.51cto.com/whitewolfblog/835134,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的build 之前执行task_浅谈VS编译自定义编译任务—MSBuild Task(csproject)-阿里云开发者社区...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。