自定义所有 .NET 生成

如果要自定义在特定计算机、虚拟机或容器上运行的所有生成,本文中的方法非常有用。 例如,设置生成服务器时,可能需要为服务器上的所有生成全局配置 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

警告

每当 Visual Studio 生成匹配类型的任何项目时,只要它能在 MSBuild 文件夹中找到自定义文件 .targets.props,就能使用它们。 这可能会带来意想不到的后果,如果操作不正确,可能会导致 Visual Studio 无法在你的计算机上进行生成。

替换常用 props 文件

还可以使用属性 AlternateCommonProps(而不是 Microsoft.Common.props)来指定要使用的自己的 .props 文件。 如果你认为需要通过直接修改来自定义 Microsoft.Common.props,可以将该文件的标准版本复制到另一个文件中,然后仅在备用版本中进行更改。

可以针对不同的应用场景使用最适合的方法。 凭借 Visual Studio 扩展性,你可以自定义生成系统,并提供安装和管理自定义项的机制。

如果你有一个专用的生成服务器,并且需要确保特定目标始终在该服务器上执行的相应项目类型的所有生成上执行,则适合使用全局自定义 .targets.props 文件。 如果需要让自定义目标仅在某些条件适用时执行,可使用其他文件位置,并(仅在需要时)通过在 MSBuild 命令行中设置相应的 MSBuild 属性设置该文件的路径。