我应该如何构造MSBuild脚本
最近,我开始学习MSBuild,以便为本地构建和服务器构建(CI、夜间构建和每周构建)灵活构建脚本。根据我的经验,我知道构建脚本可能非常笨拙。即使在我的公司,在一些指导下,了解所有目标以及它们如何协同工作也是一件痛苦的事情。当然,这是一个长期的过程:你需要一些东西,你没有足够的时间,你开始变得懒惰和混乱。但我问自己,我如何构造一个MSBuild脚本以使其易于扩展和可读?尤其是目标之间的三种关系依赖于目标、目标前、目标后,这三种关系对射中我自己的脚非常有用。好吧,正如我已经说过的,我有自己的经验:)我应该如何构造MSBuild脚本,msbuild,Msbuild,最近,我开始学习MSBuild,以便为本地构建和服务器构建(CI、夜间构建和每周构建)灵活构建脚本。根据我的经验,我知道构建脚本可能非常笨拙。即使在我的公司,在一些指导下,了解所有目标以及它们如何协同工作也是一件痛苦的事情。当然,这是一个长期的过程:你需要一些东西,你没有足够的时间,你开始变得懒惰和混乱。但我问自己,我如何构造一个MSBuild脚本以使其易于扩展和可读?尤其是目标之间的三种关系依赖于目标、目标前、目标后,这三种关系对射中我自己的脚非常有用。好吧,正如我已经说过的,我有自己的经验:
- Microsoft.CSharp/VisualBasic/FSharp.targets
- Microsoft.common.targets
- 当您尝试创建要执行的目标工作流时
- 当一个目标在没有其他目标先执行的情况下无法运行时
- 当您需要根据所需操作在特定步骤注入不同的目标时
- 如果您不拥有目标所在的文件,并且该文件没有可扩展的DependsOnTargets属性
- 您希望目标在特定目标之前/之后执行,无论何时执行
- 所有目标都有DependsOnTargets属性,该属性由属性馈送
- 每个DependsOnTargets始终将现有值前置到特性定义中
<MyTargetDependsOn>
$(MyTargetDependsOn);
Target1;
Target2
</MyTargetDependsOn>
美元(MyTargetDependsOn);
Target1;
目标2
不幸的是,许多目标没有遵循这种模式