若要自定义特定计算机、虚拟机或容器上运行的所有生成,本文中的技术非常有用。 例如,设置构建服务器时,可能需要全局配置服务器上所有构建的 MSBuild 设置。 原则上,可以修改全局 Microsoft.Common.Targets 或 Microsoft.Common.Props 文件,但有更好的方法。 通过使用某些 MSBuild 属性并添加某些自定义 .targets 和 .props 文件,可以影响特定项目类型的所有生成(例如所有 C# 项目)。
标准 .props 和 .targets 文件的前后
若要影响受 MSBuild 或 Visual Studio 安装管理的所有 C# 或 Visual Basic 构建,请创建一个文件 Custom.Before.Microsoft.Common.Targets 或 Custom.After.Microsoft.Common.Targets,包含将在 Microsoft.Common.targets 之前或之后运行的目标,或创建文件 Custom.Before.Microsoft.Common.Props 或 Custom.After.Microsoft.Common.Props,其中包含将在 Microsoft.Common.props 之前或之后处理的属性。
可以使用以下 MSBuild 属性指定这些文件的位置:
- CustomBeforeMicrosoftCommonProps
- CustomBeforeMicrosoftCommonTargets
- CustomAfterMicrosoftCommonProps
- CustomAfterMicrosoftCommonTargets
- CustomBeforeMicrosoftCSharpTargets
- CustomBeforeMicrosoftVisualBasicTargets
- CustomAfterMicrosoftCSharpTargets
- CustomAfterMicrosoftVisualBasicTargets
这些属性的 通用 版本会影响 C# 和 Visual Basic 项目。 可以在 MSBuild 命令行中设置这些属性。
msbuild /p:CustomBeforeMicrosoftCommonTargets="C:\build\config\Custom.Before.Microsoft.Common.Targets" MyProject.csproj
警告
只要在 MSBuild 文件夹中找到自定义 .targets 或 .props 文件,Visual Studio 将在生成匹配类型的项目时使用它们。 此自定义可能会产生意外的后果,如果未正确完成,则可以禁用 Visual Studio 在计算机上生成的能力。
替换通用配置文件
还可以使用属性 AlternateCommonProps 来指定要使用的文件 .props ,而不是 Microsoft.Common.props。 如果觉得需要直接修改 Microsoft.Common.props ,可以改为将该文件的标准版本复制到另一个文件中,然后仅在备用版本中进行更改。
最佳方法取决于你的方案。 使用 Visual Studio 扩展性,可以自定义生成系统,并提供用于安装和管理自定义设置的机制。
如果您有专用的构建服务器,并希望确保某些目标始终在该服务器上执行的所有适当项目类型的构建中运行,那么使用全局性自定义的 .targets 或 .props 文件是合理的。 如果希望自定义目标仅在某些条件适用时执行,则仅在需要时在 MSBuild 命令行中设置相应的 MSBuild 属性,使用其他文件位置并设置该文件的路径。