我想开始使用 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.props
和 Directory.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/