不止命令行!自定义VS生成事件

前言

在VS中打开项目属性,选择“生成事件”选项卡。在“生成前事件命令行”或“生成后事件命令行”文本框中可以输入任何命令提示符或.bat文件中有效的命令:

b30ebb49a6ba205c1e3424c708bf024c.png

但是,有没有可能执行更丰富的命令呢?

生成事件的本质

上面设置的“生成事件”保存在哪?

编辑项目文件,可以看到它实际上是一个MsBuild目标,执行Exec任务:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent"><Exec Command="del d:\$(TargetFileName)" />
</Target><Target Name="PostBuild" AfterTargets="PostBuildEvent"><Exec Command="copy $(OutDir)\$(TargetFileName)   d:\$(TargetFileName)" />
</Target>

生成前事件是在PreBuildEvent目标前运行,生成后事件是在PostBuildEvent目标后运行。

执行多任务

既然是MsBuild目标,那就不光可以执行Exec任务了。

我们可以同时执行多个MsBuild内置任务,比如将bin\Debug\net5.0目录中的所有文件复制到d:\tmp:

<Target Name="PostBuild" BeforeTargets="PostBuildEvent"><Message Text="生成后事件开始" /><RemoveDir Directories="d:\tmp" /><CreateItem Include="$(TargetDir)*.*"><Output TaskParameter="Include" ItemName="CopyFiles" /></CreateItem><Copy SourceFiles="@(CopyFiles)"DestinationFolder="d:\tmp"/><Message Text="生成后事件结束" />
</Target>
  • Message 记录一条消息

  • RemoveDir 删除指定的目录及其所有文件和子目录

  • CreateItem 使用输入项目填充项目集合,这里用来生成文件列表

  • Copy 将文件复制到指定位置

更多任务详情请查看MSBuild 任务参考[1]

可以看到执行正常:

a955ea6eef87a8196a37fd7ec2d8e2cf.png

执行C#代码

如果现成的任务不能满足要求,我们还可以编写C#代码实现任务。

当然不是编写exe,而是使用内联任务[2]

比如,输出一条错误日志:

<UsingTask
TaskName="HelloWorld"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" >
<ParameterGroup />
<Task><Using Namespace="System"/><Using Namespace="System.IO"/><Code Type="Fragment" Language="cs">
<![CDATA[Log.LogError("Hello, My IO!");
]]></Code>
</Task>
</UsingTask><Target Name="PreBuild" BeforeTargets="PreBuildEvent"><HelloWorld />
</Target>

5c724b8ed931fb030854d4c55a13199e.png

结论

通过本文,你可以了解到,如何自定义VS生成事件。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

参考资料

[1]

MSBuild 任务参考: https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-task-reference?view=vs-2019

[2]

内联任务: https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-inline-tasks?view=vs-2019

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

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

相关文章

如果你女朋友不让你看她卸妆......

1 如果你女朋友不让你看她卸妆▼2 扫地机器人的正确用法&#xff08;图源网络&#xff0c;侵删&#xff09;▼3 来比个心&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 精彩攻防战▼5 那些吃辣条的小学生长大了...▼6 人生的道路上有时候也要回头看看▼7 先礼…

[9月29日的脚本] 枚举SharePoint列表(PowerShell)

脚本下载: SPListEnumerator.zip http://gallery.technet.microsoft.com/scriptcenter/SPListEnumerator-PowerShell-b0ce0b9f 本脚本通过一个“大型”列表或者是文档库来枚举并为相关项提供信息。 在SharePoint&#xff08;2007版和2010版&#xff09;中&#xff0c;我们有一个…

深入理解javascript函数

函数实际上是对象,每个函数都是Function类型的实例,且与其他类型一样具有属性和方法.由于函数是对象,故函数名即为指向函数的指针,正是由于这一点,函数没有重载,重复定义函数只会后者替换前者. 函数的定义 函数的定义有三种: 函数声明function sum(num1,num2){ return num1num2…

mac mysql php_Mac搭建php开发环境:Apache+php+MySql

前言Windows搭建PHP开发环境很熟练了&#xff0c;要在自己的Mac搭建PHP开发环境还是第一次&#xff0c;因此分享给大家。Mac自带Apache、php,需要自己安装MySql。1.启动Apache// 启动Apache服务sudo apachectl start// 重启Apache服务sudo apachectl restart// 停止Apache服务s…

在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务

在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务https://procodeguide.com/programming/polly-in-aspnet-core/在本文中&#xff0c;我们将了解如何在微服务中实现弹性容错&#xff0c;即在 ASP.NET Core 中使用 Polly 构建弹性微服务&#xff08;Web API&#xff0…

Android开发者指南(29) —— USB Host and Accessory

前言 本章内容为Android开发者指南的 USB章节&#xff0c;译为"USB主从设备"&#xff0c;版本为Android 4.0 r1&#xff0c;翻译来自&#xff1a;"太阳火神的美丽人生"&#xff0c;欢迎访问他的博客&#xff1a;"http://alot.sinaapp.com"&#…

知乎超高赞:都有哪些习惯值得长期坚持?

全世界只有3.14 % 的人关注了爆炸吧知识知乎上有个高赞问题&#xff1a;有哪些值得长期坚持下去就能改变人生的好习惯&#xff1f;其中最高频的回答是读书。随着经历和阅历的增加&#xff0c;越来越多的人清醒的认识到&#xff1a;读书不再是学生时代的事&#xff0c;而是一生的…

理解TCP为什么需要进行三次握手(白话)(转载)

原文地址:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html#comment_tip 首先简单介绍一下TCP三次握手 在TCP/IP协议中&#xff0c;TCP协议提供可靠的连接服务&#xff0c;采用三次握手建立一个连接。 第一次握手&#xff1a;建立连接时&#xff0c;客户端发送s…

mysql 免费前端_MySQL

MySQL这是一个关系型数据库&#xff0c;存在表的概念。结构数据库可以存放多张表&#xff0c;每个表可以存放多个字段&#xff0c;每个字段可以存放多个记录。DOS命令操作数据库PHPstudy使用终端打开数据库第一步&#xff1a;设置-->MySQL工具-->MySQL命令行&#xff1b;…

linux下无法umount移动设备

linux下无法umount移动设备&#xff0c;提示&#xff1a;device is busy&#xff0c;那可以试试这个指令fuser 列出占用设备的进程 fuser -m -v /usb/ 杀掉占用设备的进程&#xff0c;-i是每个进程询问一下。 fuser -m -v -i -k /usb/转载于:https://blog.51cto.com/wapcn/706…

惊了!日本街头出现透明公厕,竟有人排队抢着上!

全世界只有3.14 % 的人关注了爆炸吧知识最近在日本一个公园内&#xff0c;一间透明的厕所火了&#xff01;厕所为什么是透明的&#xff1f;如何保证私密性&#xff1f;还是一个装置艺术&#xff0c;在哗众取宠&#xff1f;相信你跟我有一样的疑问。其实啊&#xff0c;这是日本财…

Gitflow branch与Docker image tag命名冲突怎么办?

谷歌还是比必应要好用一点。在前公司&#xff0c;我根据主流的git flow 给团队搭建了一套devops流程&#xff0c;运行在 docker & k8s上。在现代devops流程中&#xff0c;一般推荐使用git分支名或者git tag作为镜像的tag名。在实际操作中&#xff0c; 我遇到了一个流程阻塞…

ubuntu 安装 php

按照 Unofficial Ubuntu 6.06 (Dapper Drake) Linux Starter Guide的步骤来 一、安装Apache2 sudo apt-get install apache2 然后在Firefox中打开: http://localhost/ 提示成功 安装完毕后&#xff0c;接下来就要启动Apache了 如果只是用于本地开发&#xff0c;加强安全性&…

测试你的Python 水平----6

为什么80%的码农都做不了架构师&#xff1f;>>> 1、问&#xff1a;简述python中unicode和utf-8的关系&#xff1f;常用的函数有哪些&#xff1f;答&#xff1a;unicode是一个字符编码集合&#xff0c;定义每个字符的唯一编码&#xff1b;utf-8则是unicode的一种实现…

mySQL微信小程序的div_做一个微信小程序的完整流程

一. 引言最近在和朋友探讨开发一个小程序&#xff0c;都说近一两年是小程序快速发展的一年&#xff0c;不懂技术的人&#xff0c;大部分零售店面都开始想做一个小程序帮助推广销售。虽然小程序技术门槛没那么高&#xff0c;但自己独立做一个小程序还是需要了解的内容比较多的。…

970页绝版资料!初高中数学与竞赛知识点+方法技巧,由苏步青当顾问,众多一线名师共同编写!...

全世界只有3.14 % 的人关注了爆炸吧知如何才能学好数学&#xff1f;我国著名数学家苏步青先生曾说&#xff1a;"要学好数学&#xff0c;方法不外乎打好基础&#xff0c;多做习题&#xff0c;多加思索和分析”。为了帮助大家学好数学&#xff0c;今天&#xff0c;超模君要给…

Mysql不同存储引擎的表转换方法

Mysql不同存储引擎的表转换方法 1、Alter table 直接修改表的存储引擎&#xff0c;但是这样会导致大量的系统开销&#xff0c;Mysql为此要执行一个就表向新表的逐行复制。在此期间&#xff0c;转换操作可能会占用服务器的所有I/O处理能力。转换表之后&#xff0c;原先引擎的特殊…

使用WTMPlus快速搭建发卡网

快点关注我们吧作者介绍不倔强的草莓&#xff0c;从事互联网乞讨行业多年&#xff0c;深入了解乞讨业务。开发过草莓要饭网等系统。对互联网乞讨的运营有一定经验。什么是WTM框架&#xff1f;WTM框架是一款.NET平台下的开源快速开发框架,可以快速、灵活、高效的开发一个基于.NE…

LINUX IRC使用

上班第一件事就是使用IRC&#xff0c;如果系统没有&#xff0c;可以用yum install xchat安装一个&#xff08;yum不能用的请看其他资料&#xff09;&#xff0c;完成后打开IRC&#xff0c;前面昵称用户名等自己填就可以&#xff0c;然后networks中添加一个服务器&#xff0c;如…

使用js代码将HTML Table导出为Excel

使用js代码将HTML Table导出为Excel的方法&#xff1a; 直接上源码 <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <script type"text/javascript" language"javascript"&…