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,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xml层级工具_.NET的类型层次查看工具,ClassHierarchyViewer,0.3.0.1

上周为了快速了解一个.NET的库而需要查看其类型层次。假如要在文章中表示一个类型层次,还是用文本比较舒服,截图始终是不方便。Reflector虽然能够显示类型层次,但我无法方便的把显示出来的类型层次转换为文本形式。而且,Reflector…

XM7 FOR ANDROID,视频剪辑制作app-视频剪辑制作xm8.0安卓版-蜻蜓手游网

视频剪辑制作是一款很好用的手机视频编辑软件,在这里你可以进行视频剪辑、制作字幕、背景音乐制作等,让你可以轻松的制作视频,需要视频剪辑制作的就来蜻蜓手游网下载吧!软件功能【背景配乐】给视频添加背景音乐,支持MP…

css宋体代码_css中宋体怎么设置?

CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。下面我们来看一下css设置宋体的方法。css设置宋体代码如下:div里面设置字体宋体样式全局设置字体样式font-family 规定元…

android极光推送声音,android 极光推送 声音与振动 的关闭和开启

前言:最近刚好在写一些推送方面的东西,又是新手,不断在网上找资料,很少,不过还是找到了一些,反正百度我是再也不想百度了,谷歌一下子就能找到想要的。废话不多说。1.主要方法就是如下一个函数pr…

linux禁止客户端上传文件_Linux 几种上传文件到linux服务的方法

Linux下几种文件传输命令 sz rz sftp scp最近在部署系统时接触了一些文件传输命令,分别做一下简单记录:1.sftpSecure Ftp 是一个基于SSH安全协议的文件传输管理工具。由于它是基于SSH的,会在传输过程中对用户的密码、数据等敏感信息进行加密&…

韩泰机器人_[视频]Hankook Mirae展示四米高的Method-2载人两足机器人

Method-2 身高 13 英尺(约合 4 米),重 1.5 吨。当它“走路”的时候,地面都会跟着一起震动。Hankook Mirae Technology 董事长 Yang Jin-Ho 表示:“Method-2 是全球首款载人双足机器人,它能够在人类难以企及的极端危险地带开展工作…

r语言的MASS包干什么的_R语言综述的包

Multivariate Statistics(多元统计)基本的R包已经实现了传统多元统计的很多功能,然而CRNA的许多其它包提供了更深入的多元统计方法,下面做个简要的综述。多元统计的特殊应用在CRNA的其它任务列表(taskview)里也会提及,如:排序(ord…

eps倾斜摄影矢量化采集毕业设计_eps倾斜摄影矢量化dlg采集

1、倾斜摄影测量倾斜摄影测量和我们传统影像的区别:从数据采集的方式来看,传统影像是通过飞机上搭载的航摄仪对地面连续摄取相片,而后经过一系列的内业处理得到的影像数据,获取的成果只有地物俯视角度信息,也就是视角垂…

在html中怎么写背景色渐变,css3背景色渐变

css3背景色渐变难是不难,就是麻烦。不同浏览器用法不同,还有个爱掺和的ie。。。一. Webkit浏览器(1) 第一种写法:background:-webkit-gradient(linear ,10% 10%,100% 100%,color-stop(0.14,rgb(255,0,0)),color-stop(0…

混凝土墙开洞_易县混凝土剪力墙切割常见问题

易县混凝土剪力墙切割常见问题北京专业切割 承接水泥地面切割路面切割 混凝土地面切割 地面切割开线槽 楼板切割 墙体切割 柱子切割 沥青地面切割 洋灰地面切割 切割开线槽 。是一个以建筑液压钳拆除结构加固和切割拆除、水钻钻孔的综合性公司。加固设计、混凝土外部粘钢加固、…

html中怎么写播放音乐格式,HTML+CSS入门 如何实现多浏览器播放wav格式的音频文件...

本篇教程介绍了HTMLCSS入门 如何实现多浏览器播放wav格式的音频文件&#xff0c;希望阅读本篇文章以后大家有所收获&#xff0c;帮助大家HTMLCSS入门。<使用audioplayer.js 基本上能支持大部分浏览器播放wav音频文件&#xff0c;经测试IE、火狐、google浏览器都可以播放编码…

差分放大电路差模共模公式_差分放大电路对差模信号和共模信号有什么影响?...

现在在应用中使用的放大电路一般都是由各级级联组成的&#xff0c;直接级联的放大电路各级的直流通路相互关联&#xff0c;因而当前级的静态工作点由于某种原因而稍有偏移时&#xff0c;这种缓慢的微小变化就会逐级影响&#xff0c;致使放大器的输出端产生较大的电压漂移&#…

html本地载入缓存文件,Flutter中如何加载并预览本地的html文件的方法

搜索热词直接进入主题&#xff0c;大概步骤如下在 assets 创建需要访问 html 文件&#xff0c;如下这里创建一个files文件夹&#xff0c;专门来放这些静态 html 文件.在 pubspec.yaml 中配置访问位置assets:- assets/images/- assets/files/在 pubspec.yaml 添加 webview_flutt…

三维数据平滑处理_关于CAD三维对象建模

下面是本公众号文章分类目录&#xff0c;点击标题文字可打开分类文章列表&#xff1a;安装卸载 异常、退出 文件及输入输出 基本操作技巧 设置及相关问题 界面和显示 快捷键 视图设置和调整 图层管理 颜色 线型 字体、文字样式和文字输入 标注、引线和标注样式 坐标系…

html下拉列表框的长度,HTML中如何定义下拉列表框的默认长度?

一共两个文件,html页面里面调用js文件就可以了,不是要把代码也复制到html文件里面^……联动菜单 是这个意思吗?实现方法很多 推荐一个比较好的:琥珀联动菜单以下信息为琥珀联动菜单&#xff1a;(在此感谢作者&#xff01;)下面是静态页面&#xff1a;HPMenu_Demo.html<html…

3蛋白wb_老司机手把手教你选WB内参

俗话说&#xff0c;一个生物学博士&#xff0c;要跑满1000面胶才能毕业。今天特邀实验室博三大师兄&#xff0c;和大家聊一聊WB内参那些小事。选择好合适并且好跑的内参&#xff0c;WB实验也就成功了一半。1. 什么是内参&#xff1f;内参即内部参照&#xff0c;一般是指由管家基…

制作支付页面弹框html,JS实现仿微信支付弹窗功能_蜡烛_前端开发者

先奉上效果图/p>body {margin: 0;padding: 0;font-size: 0.3rem;font-family: "微软雅黑", arial;}ul,li {margin: 0;padding: 0;list-style: none;}img {display: block;}#myBtn {display: block;width: 80%;height: auto;margin: 5rem auto;padding: 0.2rem;bor…

华为二层创建vlan_二层交换机不同VLAN实现互通 (华为)

1 &#xff0c;实验名称&#xff1a;二层交换机不同VLAN实现互通 (华为)2&#xff0c;实验环境&#xff1a;(1)PC1 PC2(2)二层交换机两台(3)三层交换机一台(路由功能)3&#xff0c;实验拓扑&#xff1a;2 配置步骤&#xff1a;(1)配置PC1&#xff1a;IP &#xff1a;192.168.10…

html 360不识别,html 为什么在ie里显示正常在360浏览器不正常呢?

匿名用户1级2016-07-19 回答需要ie和webkit类浏览器兼容css&#xff1a;.search_box {position: relative;width: 360px;overflow: visible;}.search_box * {margin: 0;padding: 0;list-style: none;font: normal 12px/1.5em "宋体", Verdana, Lucida, Arial, Helvet…

主板24pin接口详图_【图解】主板连线接口最详尽图文解释

【图解】主板连线接口最详尽图文解释我为人人&#xff0c;公益分享&#xff01;论坛地址&#xff1a;chayunyx.uueasy.cn本文结构&#xff1a;一、认识主板供电接口图解安装详细过程二、认识CPU供电接口图解安装详细过程三、认识SATA串口图解SATA设备的安装四、认识PATA并口图解…