首页 > 解决方案 > Microsoft.CodeDom.Providers.DotNetCompilerPlatform 和 Microsoft.Net.Compilers 有什么区别?

问题描述

我从 .NET 4.6.1 升级到 4.7.2 的旧项目包含对Microsoft.Bcl.Build另一个 had的引用Microsoft.Net.CompilersMicrosoft.Bcl.Build非常过时(2014),所以我们可以忽略它。

我读到它Microsoft.Net.Compilers已被弃用了一段时间,并且曾经是Microsoft.CodeDom.Providers.DotNetCompilerPlatform. 然后Microsoft.CodeDom.Providers.DotNetCompilerPlatform在 2.x 中更新为不再具有Microsoft.Net.Compilers依赖项。

现在,事情似乎又发生了逆转,因为Microsoft.CodeDom.Providers.DotNetCompilerPlatform自 2018 年以来一直没有更新,而Microsoft.Net.Compilers仅在 22 天前更新了对 C# 8 的支持!该Microsoft.Net.Compilers页面(https://github.com/dotnet/roslyn/blob/master/docs/wiki/NuGet-packages.md)在底部提到了该Microsoft.CodeDom.Providers.DotNetCompilerPlatform软件包,但并未真正解释它们的关系或为什么没有多年来一直在更新。奇怪的是,另一个将这个作为依赖项,然后将其删除,现在不再维护。

其他建议是,System.Net.Compilers已弃用,使用System.Net.Compilers.ToolSet,还有其他建议是“不要使用任何一种”,既不适合一般消费,也不在 VS 16.5 之后可用:https ://stackoverflow.com/a/60623906/ 88409

这些包似乎都覆盖了构建系统,所以它们是互斥的吗?两者都安装时确实出现错误(如下所述),但这可能不一定是由互斥性引起的。


附加信息

当面向 .NET 4.7.2 时,没有安装任何包,我在 MVC cshtml 页面上收到错误消息:

“System.Object”类型是在未引用的程序集中定义的。您必须添加对程序集“netstandard,Version=2.0.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”的引用。家”。

尽管发布成功,但安装System.Net.Compilers并不能解决它。同时,Microsoft.CodeDom.Providers.DotNetCompilerPlatform自行安装确实可以修复错误。后者所做的不同之处在于,它在 web 配置中为 system.codedom/compilers/compiler 添加了一个部分,用于 language="c#"。

即使两个单独安装都很好,如果我安装了两个包,发布操作会失败并显示错误消息“Microsoft.Net.Compilers 仅在 MSBuild v16.3 上受支持”,所以它几乎看起来像是Microsoft.CodeDom.Providers.DotNetCompilerPlatform在强制使用(或者是基于?)早期版本的 MSBuild?Project 文件的 ToolsVersion 属性为 14(尽管将其设置为其他任何值似乎都没有任何效果。例如,我将其设置为 215 并且它没有抱怨。这一切都非常令人困惑。

标签: .netcompiler-constructionroslyn

解决方案


推荐阅读