MSBuildTasks
简介
- MSBuild生成项目是基于一系列任务来完成的,我们也可以进行拓展增加自己的任务,比如复制文件、自动上传到服务器、同步git、执行测试单元等等,帮助我们完成一系列重复枯燥的动作,同时它也能集成到nuget包里面,安装的时候它自动导入到项目里面,此功能可以代替以前nuget包的
\tools\install.ps1
的脚本功能 - 如果是开发包含前端需要编译打包的项目,可以在MSBuild Tasks里,在项目运行之前执行打包工作
- 官网
GetStart
-
罗里吧嗦的就不讲了,还没懂的讲了也不懂,反正你们也不会看官网,先来个Hello World!
- 首先建一个项目,为了方便编辑,新建一个 .net core 控制台项目
- 项目=>右键=>编辑csproj
- 在最后面添加如下代码,放在
<Project></Project>
里面即可<Target Name="HelloWorld" BeforeTargets="CoreCompile"> <Message Text="Hello World!" Importance="high" /> </Target>
- 生成项目,查看输出窗口,可以看到如下输出
- Target目标里面放一系列任务,每个目标都有Name,重名会被覆盖,BeforeTargets、AfterTargets是执行时机,动作可以是CoreCompile编译,或者PostBuildEventg构建,参考目标生成顺序
- 更多自带的任务
自定义任务
- 自带的例子功能有限,我们可以自己实现一个任务,自定义功能
- 官方教程-自定义一个任务
- 官方教程-引入任务,从
AssemblyFile
指定的dll中加载TaskName
中指定的类型,等效于使用 .NET 中的 LoadFrom 方法加载程序集然后获取对应的类型,该类型必须实现ITask接口 - 一定记得在
Target
上加BeforeTargets="CoreCompile"
,相当于调用,官网的例子没加,我跑不起来,所以要注意这个
使用MSBuild.Targets 文件
- 如果在一个项目里面引入了太多的任务,不方便管,而且要多个项目共用也麻烦,这时候可以使用MSBuild .Targets文件l方便管理,然后导入到项目
- 示例
<Import Project="$(CommonLocation)\General.targets" />
,可以是绝对路径、绝对路径、还有通配符。如果在nuget包包含这个文件,安装以后会自动导入到安装用户的项目里面,被触发的时候就会运行
nuget包中使用targets
- 请参考这两篇博客,在NuGet包中提供跨平台的MSBuild任务 、在NuGet中捆绑.NET构建工具
- 文件的命名很重要PackageId + “.targets”,NuGet会忽略其他文件
调试
-
参考这篇博客,加上
Debugger.Launch();
,运行到那一行代码即可命中断点,跟js的debugger差不多吧。还有里面说到的正统方法没试成功,可能是我设置不对,就没折腾 -
vs编译项目的时候实际上调用的事msbuild.exe,理论上附加到这个进程并断点也是可以的,如果是dotnet命令方式编译,那就附加到dotnet进程进行调试,但感觉还是
Debugger.Launch();
简单粗暴