.net - Microsoft.CodeDom.Providers.DotNetCompilerPlatform 和 Microsoft.Net.Compilers 有什么区别?
问题描述
我从 .NET 4.6.1 升级到 4.7.2 的旧项目包含对Microsoft.Bcl.Build
另一个 had的引用Microsoft.Net.Compilers
。Microsoft.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 并且它没有抱怨。这一切都非常令人困惑。
解决方案
推荐阅读
- javascript - 如何使用 JavaScript 编辑 CSS 主题标签
- javascript - PropType 可选以反应组件
- google-slides-api - 基于在演示文稿中创建新幻灯片的 Google 幻灯片中的不可编辑时间戳
- javascript - 如何使用节点 js 中谷歌驱动器中的谷歌 API 克隆文件夹结构并上传到谷歌存储桶?
- kubernetes - 如何恢复意外删除主标签的 k8s/Openshift 集群
- javascript - 自定义 javascript 视频播放器在 11 秒后停止
- html - 不占用空间的粘性元素(如相对/绝对元素) - CSS
- javascript - 在 TinyMCE 5 中为自定义菜单项添加样式
- macos - 为什么 x86 中的这个与链表相关的程序会出现段错误?
- android - 如何让edittext监听器每次都工作?