当前位置: 首页 > news >正文

让 MSBuild Target 支持 Clean

我们有时候会使用解决方案的清理(Clean)功能来解决一些项目编译过程中非常诡异的问题。这通常是一些 Target 生成了一些错误的中间文件,但又不知道到底是哪里错了。

我们自己编写 Target 的时候,也可能会遇到这样的问题,所以让我们自己的 Target 也能支持 Clean 可以在遇到诡异问题的时候,用户可以自己通过清理解决方案来消除错误。


以下代码来自于 SourceFusion/Package.targets。这是我主导开发的一个预编译框架,用于在编译期间执行各种代码,以便优化代码的运行期性能。

<PropertyGroup>
    <CleanDependsOn>$(CleanDependsOn);_SourceFusionClean</CleanDependsOn>
</PropertyGroup>

  <!--清理 SourceFusion 计算所得的文件-->
<Target Name="_SourceFusionClean">
    <PropertyGroup>
        <_DefaultSourceFusionWorkingFolder Condition="'$(_DefaultSourceFusionWorkingFolder)' == ''">obj\$(Configuration)\</_DefaultSourceFusionWorkingFolder>
        <SourceFusionWorkingFolder Condition="'$(SourceFusionWorkingFolder)' == ''">$(_DefaultSourceFusionWorkingFolder)</SourceFusionWorkingFolder>
        <SourceFusionToolsFolder>$(SourceFusionWorkingFolder)SourceFusion.Tools\</SourceFusionToolsFolder>
        <SourceFusionGeneratedCodeFolder>$(SourceFusionWorkingFolder)SourceFusion.GeneratedCodes\</SourceFusionGeneratedCodeFolder>
    </PropertyGroup>
    <RemoveDir Directories="$(SourceFusionToolsFolder);$(SourceFusionGeneratedCodeFolder)" />
</Target>

这段代码的作用便是支持 Visual Studio 中的解决方案清理功能。通过指定 CleanDependsOn 属性的值给一个新的 Target,使得在 Clean 的时候,这个 Target 能够执行。我在 Target 中删除了我生成的所有中间文件。

你可以通过阅读 通过重写预定义的 Target 来扩展 MSBuild / Visual Studio 的编译过程 来了解这个 Target 是如何工作起来的。


参考资料

  • How to: Clean a Build - Visual Studio - Microsoft Docs

我的博客会首发于 https://walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://blog.csdn.net/wpwalter),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • C#/.NET 如何确认一个路径是否是合法的文件路径
  • 不使用 U 盘等任何工具全新安装 Windows 操作系统
  • C# 永远不会返回的方法真的不会返回
  • CentOS 的终端中如何搜索文件
  • 如何在命令行中监听用户输入文本的改变?
  • 使用 Xamarin 开发 iOS 键盘扩展(含网络访问)
  • 使用 Xamarin 开发 iOS 应用中需要注意的若干个问题
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • 使用 Xamarin 在 iOS 真机上部署应用进行调试
  • 在 Snoop 中使用 PowerShell 脚本进行更高级的 UI 调试
  • WPF 支持的多线程 UI 并不是线程安全的
  • ReSharper 在 C 盘占用了太多空间了,本文告诉你如何安全地删除或转移这些文件
  • WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了
  • git 的合并原理(递归三路合并算法)
  • git 合并策略
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • classpath对获取配置文件的影响
  • Java深入 - 深入理解Java集合
  • js算法-归并排序(merge_sort)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Magento 1.x 中文订单打印乱码
  • mysql 数据库四种事务隔离级别
  • Redis学习笔记 - pipline(流水线、管道)
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 模型微调
  • hi-nginx-1.3.4编译安装
  • PostgreSQL之连接数修改
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #1015 : KMP算法
  • (3)(3.5) 遥测无线电区域条例
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)jdk与jre的区别
  • (转)Linq学习笔记
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .htaccess配置重写url引擎
  • .Net 4.0并行库实用性演练
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .netcore如何运行环境安装到Linux服务器
  • .Net程序帮助文档制作
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)