title author date CreateTime categories
Roslyn 理解 msbuild 的清理过程
lindexi
2019-07-03 18:21:25 +0800
2019-07-03 17:35:51 +0800
Roslyn MSBuild 编译器

在开发的时候,小伙伴会使用右击解决方案,点击清理解决方案。在这个按钮点击的背后 msbuild 做了什么?为什么很多时候的清理之后还存在一堆文件?如何让自己想的 Target 也支持清理

在点击清理按钮的时候,将会执行 msbuild 的清理代码,对应的 Clean 这个 Target 将会被执行

在 Clean 执行的时候,是如何让 msbuild 知道哪些文件可以删除,哪些文件不能被删除?在编译的过程和清理的过程是独立,如何在清理的过程能知道编译的时候生成了哪些文件是属于可删除的

两个过程之间的通信最简单的就是使用文件,在 msbuild 编译的时候,将会生成一个 .FileListAbsolute.txt 文件,可以在清理的时候通过读取这个文件知道有哪些内容是可以删除的

尝试新建一个项目,在这个项目的 obj 文件夹里面找到 .FileListAbsolute.txt 文件,打开这个文件的内容,尝试在里面删除或添加一项,然后执行清理命令

此时将会发现在 .FileListAbsolute.txt 列出的文件将会被删除,没有被列出的文件将不会删除

这也就是为什么使用清理之后还有很多文件没有删除,因为这些文件都没有加入到 .FileListAbsolute.txt 列表

那么使用这个机制,如何让自己写的 Target 支持在清理的时候删除创建的临时文件?

此时有两个方法,第一个方法就是使用 msbuild 清理的方法,在编译的时候添加创建的文件进入可以删除的文件列表

通过 $(IntermediateOutputPath)$(CleanFile) 可以拿到对应的清理文件

于是在这个文件里面写入需要删除的文件列表就可以,注意写入的是绝对路径

上面方法的好处是如果在编译的时候会创建一些随机的文件,那么在清理的过程可以找到这些随机创建的文件

另一个方法是在执行清理的时候运行自己的代码

创建一个 PropertyGroup 在里面添加自己的 target 名在 CleanDependsOn 里面,如下面代码将 Lindexi 添加到清理的依赖项

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

将会在清理的时候,先执行添加的依赖项 Lindexi 的代码

<Target Name="Lindexi">
清理的代码
</Target>

让 MSBuild Target 支持 Clean - walterlv

Microsoft.Common.CurrentVersion.targets

2019-7-3-Roslyn-理解-msbuild-的清理过程的更多相关文章

  1. 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...

  2. 一张图理解RACSignal的Subscription过程

    通过下面一张图理解RACSignal的调用过程: 创建signale RACSignal通过子类[RACDynamicSignal createSignal:]方法获得Signal,并将disSubs ...

  3. 使用roslyn代替MSBuild完成解决方案编译

    原本我是使用批处理调用 MSBuild 完成解决方案编译的,新版的 MSBuild 在 Visual Studio 2015 会自带安装. 当然在Visual Studio 2015 中,MSBuil ...

  4. dig理解DNS的解析过程 - 阿权的书房

    关于DNS的常识,可以阅读附录的一些参考资料.本文旨在尝试举例用dig命令理解这个过程,并非权威知识,仅供参考.测试域名为阿权的书房的域名 www.aslibra.com 和 www.163.com. ...

  5. 从涂鸦到发布——理解API的设计过程(转)

    英文原文:From Doodles to Delivery: An API Design Process 要想设计出可以正常运行的Web API,对基于web的应用的基本理解是一个良好的基础.但如果你 ...

  6. [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示

    javascript面向对象编程方式,对于初学者来说,会比较难懂. 要学会面向对象以及使用面向对象编程,理解对象的创建在内存中的表示,至关重要. 首先,我们来一段简单的对象创建代码 var obj = ...

  7. 小记IptabLes和IptabLex病毒清理过程

    去年有台Linux服务器被黑了,看了500万行日志(现在觉得当时好厉害呀),反正当时的日志文件有700Mb以上大.前两天师兄告诉我,信息中心的老师给他说我们有台服务器应该是被人入侵了,当作内网的跳板, ...

  8. 记一次阿里云linux病毒清理过程

    1.起因   因为这台服务器是我们公司内部开发服务器,几乎每个人都有root密码.在两天前突然有同事反馈说偶尔会有ssh连不上,git代码无法提交的问题,刚开始也没有在意,以为是阿里云服务器网络波动的 ...

  9. 大白话5分钟带你走进人工智能-第31节集成学习之最通俗理解GBDT原理和过程

    目录 1.前述 2.向量空间的梯度下降: 3.函数空间的梯度下降: 4.梯度下降的流程: 5.在向量空间的梯度下降和在函数空间的梯度下降有什么区别呢? 6.我们看下GBDT的流程图解: 7.我们看一个 ...

  10. 大白话5分钟带你走进人工智能-第32节集成学习之最通俗理解XGBoost原理和过程

    目录 1.回顾: 1.1 有监督学习中的相关概念 1.2  回归树概念 1.3 树的优点 2.怎么训练模型: 2.1 案例引入 2.2 XGBoost目标函数求解 3.XGBoost中正则项的显式表达 ...

随机推荐

  1. C# 优雅的处理TCP数据(心跳,超时,粘包断包,SSL加密 ,数据处理等)

    Tcp是一个面向连接的流数据传输协议,用人话说就是传输是一个已经建立好连接的管道,数据都在管道里像流水一样流淌到对端.那么数据必然存在几个问题,比如数据如何持续的读取,数据包的边界等. Nagle's ...

  2. 使用SpringBatch读取csv文件

    目录 1.需求 2.解决方案 3.注意事项 1.文件路径的获取 2.各个Step如果获取到ExecutionContext中的值 3.FlatFileItemReader使用注意 4.实现步骤 1.导 ...

  3. Android Button 点击事件

    Ctrl+Alt+Space(空格键) 可以显示提示内容

  4. C# 介绍、应用领域、入门、语法、输出和注释详解

    什么是 C#? C#(发音为"C-Sharp")是一种由 Microsoft 创建的面向对象的编程语言,运行在 .NET Framework 上.源于 C 家族,与流行的语言如 C ...

  5. 详讲openGauss 5.0 单点企业版如何部署_Centos7_x86

    本文分享自华为云社区<openGauss 5.0 单点企业版部署_Centos7_x86>,本文作者:董小姐 本文档环境:CentOS7.9 x86_64 4G1C40G python2. ...

  6. HarmonyOS极客松“上分秘籍”! 高手们顶峰相见!

      HarmonyOS 极客马拉松2023 火热进行中,我们期待与各位开发者相聚一起,践行极客精神,创造无限可能! 我们鼓励各位极客们自由组队,挥洒创意,用HarmonyOS 探索移动应用和服务的更多 ...

  7. 服务器日志qsnctfwp

    使用 WireShark 打开日志文件 log.pcpng 获取恶意用户下载的文件 方法一:通过对 FTP-DATA 对象导出,可知下载了名为 flag 的文件,通过 save 可获取文件 方法二:通 ...

  8. Java构建工具:Maven与Gradle的对比

    在Java码农的世界里,构建工具一直是一个不可或缺的元素.一开始,世上是只有一个构建工具的那就是Make后来发展为GNU Make.但是由于需求的不断涌现,这个小圈子里又逐渐衍生出其他千奇百怪的构建工 ...

  9. Centos 8.0 minimal命令行安装图形化界面(超详细)

    Centos 8.0 安装图形化界面(超详细) 开始之前呢,请先查看您的Centos版本和是否有root账户权限. 一.安装Centos 图形化界面并重启 下载安装图形化界面 执行命令 yum gro ...

  10. 行业软件开发商怎样来抢 BI 这块蛋糕?

    随着企业信息化建设的深入,很多机构的生产系统已建设完成,在保证生产的有序进行后,如何更有效地进行经营决策成了管理者面临的最大任务.商业智能(BI)就是在这种背景成为支撑企业经营分析的一大利器. 根据 ...