不止命令行!自定义VS生成事件
前言
在VS中打開項(xiàng)目屬性,選擇“生成事件”選項(xiàng)卡。在“生成前事件命令行”或“生成后事件命令行”文本框中可以輸入任何命令提示符或.bat文件中有效的命令:
但是,有沒有可能執(zhí)行更豐富的命令呢?
生成事件的本質(zhì)
上面設(shè)置的“生成事件”保存在哪?
編輯項(xiàng)目文件,可以看到它實(shí)際上是一個(gè)MsBuild目標(biāo),執(zhí)行Exec任務(wù):
<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目標(biāo)前運(yùn)行,生成后事件是在PostBuildEvent目標(biāo)后運(yùn)行。
執(zhí)行多任務(wù)
既然是MsBuild目標(biāo),那就不光可以執(zhí)行Exec任務(wù)了。
我們可以同時(shí)執(zhí)行多個(gè)MsBuild內(nèi)置任務(wù),比如將bin\Debug\net5.0目錄中的所有文件復(fù)制到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="生成后事件結(jié)束"?/> </Target>Message 記錄一條消息
RemoveDir 刪除指定的目錄及其所有文件和子目錄
CreateItem 使用輸入項(xiàng)目填充項(xiàng)目集合,這里用來生成文件列表
Copy 將文件復(fù)制到指定位置
更多任務(wù)詳情請(qǐng)查看MSBuild 任務(wù)參考[1]
可以看到執(zhí)行正常:
執(zhí)行C#代碼
如果現(xiàn)成的任務(wù)不能滿足要求,我們還可以編寫C#代碼實(shí)現(xiàn)任務(wù)。
當(dāng)然不是編寫exe,而是使用內(nèi)聯(lián)任務(wù)[2]。
比如,輸出一條錯(cuò)誤日志:
<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>結(jié)論
通過本文,你可以了解到,如何自定義VS生成事件。
如果你覺得這篇文章對(duì)你有所啟發(fā),請(qǐng)關(guān)注我的個(gè)人公眾號(hào)”My IO“,記住我!
參考資料
[1]
MSBuild 任務(wù)參考: https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-task-reference?view=vs-2019
[2]內(nèi)聯(lián)任務(wù): https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-inline-tasks?view=vs-2019
總結(jié)
以上是生活随笔為你收集整理的不止命令行!自定义VS生成事件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Source Generator 单元测
 - 下一篇: 在 ASP.NET Core Web A