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

标签 c# .net build msbuild

我想开始使用 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 中的新项目设置: Switch from packages.config to ProjectReference (动画来自上面链接的 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>

关于c# - 如何在解决方案级别使用 Microsoft.Net.Compilers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43393822/

相关文章:

.net - 我需要处理这个 Image 实例吗?

gcc - 在 cmake 中检查 gcc 次要

c# - 不知何故MySQL在运行后突然无法执行查询

c# - 在 c# asp.net 中,静态类比非静态类更有效吗?

c# - 如何在 Silverlight 中使用 TextRange?

python - 通过 setup.py 构建的 cython 做错事(将所有 .so 文件放在额外的 src 目录中)

java - 如何在多项目 gradle 构建系统中使用变量?

c# - 访问 Path.GetTempPath();失败

c# - 将线程本地数据与 PLINQ AsParallel() 一起使用?

.net - 优化 SQL Server 2008 存储过程