1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 不止命令行-自定义VS生成事件

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

时间:2022-12-03 06:36:51

相关推荐

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

前言

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

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

生成事件的本质

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

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

<TargetName="PreBuild"BeforeTargets="PreBuildEvent"><ExecCommand="deld:\$(TargetFileName)"/></Target><TargetName="PostBuild"AfterTargets="PostBuildEvent"><ExecCommand="copy$(OutDir)\$(TargetFileName)d:\$(TargetFileName)"/></Target>

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

广告

Core开发实战

作者:[意]迪诺·埃斯波西托(Dino Esposito)著 赵利通 译

当当

购买

执行多任务

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

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

<TargetName="PostBuild"BeforeTargets="PostBuildEvent"><MessageText="生成后事件开始"/><RemoveDirDirectories="d:\tmp"/><CreateItemInclude="$(TargetDir)*.*"><OutputTaskParameter="Include"ItemName="CopyFiles"/></CreateItem><CopySourceFiles="@(CopyFiles)"DestinationFolder="d:\tmp"/><MessageText="生成后事件结束"/></Target>

Message记录一条消息

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

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

Copy将文件复制到指定位置

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

可以看到执行正常:

执行C#代码

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

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

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

<UsingTaskTaskName="HelloWorld"TaskFactory="CodeTaskFactory"AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll"><ParameterGroup/><Task><UsingNamespace="System"/><UsingNamespace="System.IO"/><CodeType="Fragment"Language="cs"><![CDATA[Log.LogError("Hello,MyIO!");]]></Code></Task></UsingTask><TargetName="PreBuild"BeforeTargets="PreBuildEvent"><HelloWorld/></Target>

结论

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。