c# - 如何在解决方案级别使用 Microsoft.Net.Compilers?

我想开始使用 Microsoft.Net.Compilers简化我们的构建服务器的工作。但是,我只能让它在 per-project level 上工作。 , 通过将包添加到所有项目。
这是有问题的,因为必须将包添加到每个新创建的项目中。这可能会导致代码在开发人员的机器(具有最新的编译器)上编译,但在构建服务器上会失败。我们有很多项目(超过 100 个),所以这种情况比较常见。

有没有办法在解决方案级别使用 Microsoft.Net.Compilers

如果没有受支持的方式,是否有我不必在构建服务器上安装的命令行工具?或者,这不是这些工具的预期用途吗?

最佳答案

如果在 VS 2017(更新 1,内部版本号 >= 15.1.*)中,您可以使用 MSBuild 集成的 PackageReference 机制,而不是以前的 packages.config可用于 .net 核心和 .net 标准项目类型。见 PackageReference documentation以及 NuGet blog post宣布支持,尤其是“非 .NET Core 的其他项目类型怎么办?”部分。

我们的想法是从安装包并将其添加到 packages.config 以进行恢复转换为仅在 csproj 文件中指定 MSBuild 项。这可以为 VS 中的新项目设置: (动画来自上面链接的 NuGet 博客文章)

MSBuild 15 的一个新特性是它支持自动在目录层次结构中包含具有特殊名称的文件。这些是 Directory.Build.propsDirectory.Build.targets 将包含在您的项目文件内容之前( Prop )和之后(目标)(有一个错误.targets 版本,用于即将发布修复的多目标项目)。

如果您在解决方案级别创建具有以下内容的 Directory.Build.props 文件,其下目录层次结构中的所有项目都将继承它的内容,您可以对每个项目强制一个 NuGet 依赖:

<Project>
  <ItemGroup>
    <PackageReference Include="Microsoft.Net.Compilers" Version="2.1.0"/>
  </ItemGroup>
</Project>

https://stackoverflow.com/questions/43393822/

相关文章:

c# - 如何在我的应用程序中显示上次构建的内部版本号和/或日期时间?

java - 什么是 org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAI

build - 错误 : Sonar server 'http://localhost:9000'

javascript - 如果我仍然在构建时连接所有文件,我为什么要使用 require.js?

tfs - 等待可用代理/等待请求代理

build - 无法打开共享对象文件

java - 将 Google Guava 添加到 Android 项目 - 显着减慢构建速度

javascript - 需要一个带有 webpack 的模块

ios - 如何为 iPhone 构建 Boost-Libraries

.net - MSBuild 和 F# 的 FAKE 有什么区别?