【问题标题】:What is the purpose of Microsoft.Net.Compilers?Microsoft.Net.Compilers 的目的是什么?
【发布时间】:2016-04-04 16:03:54
【问题描述】:

这个编译器的重要性是什么?它是必须拥有还是可以没有?无论如何,拥有另一个编译器的目的是什么,或者它只是一个未来的项目?简要概述将不胜感激。

【问题讨论】:

标签: c# asp.net-mvc vb.net


【解决方案1】:

它是一个为开源 C# 和 Visual Basic 编译器提供丰富的代码分析 API 的包。

您可以在 github 上找到大量文档:

https://github.com/dotnet/roslyn

【讨论】:

  • 谢谢。之前看过官方文档,但是还是觉得项目的目的很模糊。
  • @usefulBee 基本上它是微软开源运动的结果,查看维基百科以获取更多信息:en.wikipedia.org/wiki/.NET_Compiler_Platform
【解决方案2】:

Microsoft.Net.Compilers 包的意义在于,与该包一起分发的编译器将用于编译您的项目,而不是 .NET Framework 或 Visual Studio 附带的编译器。最实际的直接好处是它允许您的项目使用 C# 6 功能,然后允许将这些项目构建在没有安装 C# 6 编译器的系统上,例如在您没有安装的持续集成服务器上不想安装完整的 Visual Studio 2015。

【讨论】:

  • 我需要做一件非常简单的事情,就是编译任何.cs文件并发出il,不需要验证外部引用等。Microsoft.Net.Compilers可以吗?
  • @Bandara 在没有外部引用的情况下,无论有没有 Microsoft.Net.Compilers,都无法编译 C#。例如,重载解析需要引用的程序集。如果您确实有外部参考,那么在技术上使用 Microsoft.Net.Compilers 是可行的,但它确实是不适合这项工作的工具。当相同的编译器已经在其他包中可用时,您将启动一个外部进程,您可以直接在自己的程序中调用。
  • 查看@JaredPar (MS) 的更新答案,此答案不再有效。猜猜我们应该检查我们的解决方案并删除旧包,以便使用最新的 VS/VSCode/SDK 工具集进行构建。
【解决方案3】:

正如其他人所说,它包含用于 C# 和 VB.NET 的 .NET 编译器。

这是一个包的一个有趣方面是,您可以为您的项目指定编译器的特定构建,包括尚未随 Visual Studio 提供的版本。

我们在 https://github.com/dotnet/project-system 中使用它,它是 Visual Studio 的一个开源组件。它允许我们使用预发布版本的编译器来测试 VS 附带的编译器不支持的语言特性。

【讨论】:

    【解决方案4】:

    Microsoft.Net.Compilers 目前没有任何用途。这是一个已弃用的 NuGet 包,将在 Visual Studio 16.5 之后停止生成。有一个名为 Microsoft.Net.Compilers.Toolset 的后续程序包。此包与 Microsoft.Net.Compilers 具有相同的功能,但适用于 .NET Desktop 和 .NET Core MSBuild 实例。

    即便如此,Microsoft.Net.Compilers.Toolset 也不适合一般消费。这个包有两个特定的用途:

    1. 作为一种短期工具,用于解除在编译器中遇到崩溃错误的客户。对于此类客户,我们可以在将修复程序合并到 Roslyn 存储库后一小时左右使用此软件包解除对他们的场景的阻止。这将作为一个桥梁,直到修复使其进入相关的 Visual Studio 或 .NET SDK 服务版本。当这种情况发生时,客户会被要求从他们的解决方案中删除包并依赖官方发布的工具集。
    2. 用作在 Roslyn 和 .NET SDK 的官方版本之间移动二进制文件的机制。

    此软件包适用于客户为其构建的一般长期使用。我了解一些客户选择这样做,但也不支持这样的使用。由于依赖于新版本的 MSBuild 或 .NET SDK 中的任务/目标,该包可以并且将定期导致中断。

    鼓励希望在其构建中使用新版本编译器的客户改为使用编译器的官方发行版之一:

    1. 使用 Visual Studio 构建工具 SKU。
    2. 使用 .NET SDK

    注意:Microsoft.Net.Compilers 包在几年前被正式支持为 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 包的一部分,因为它是一个依赖项。从 2.0 版开始,虽然对 Microsoft.Net.Compilers 的依赖已被删除,但它现在是一个完全独立的包。同时,我们已经开始弃用 Microsoft.Net.Compilers,因为它不再有任何明确的用例。

    这确实意味着一些客户意外地发现他们的项目文件中包含 Microsoft.Net.Compilers,因为在 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 删除依赖项时它没有被删除。对此类客户的建议是简单地删除对包的引用。它不再需要了。

    【讨论】:

    • 非常有趣的见解。我想知道为什么 NuGet 包的描述中没有提到仅短期使用方面:nuget.org/packages/Microsoft.Net.Compilers
    • @JackMiller Microsoft.Net.Compilers.Toolset 中提到过。 ` 此软件​​包主要用作向客户快速发送修补程序的一种方法。明确不支持将其用作在较旧的 MSBuild 安装上提供较新编译器的长期解决方案。这可以而且会定期中断。`
    • Microsoft.Net.Compilers vs Microsoft.CodeDom.Providers.DotNetCompilerPlatform 的目的是什么?两个包似乎都包含相同的编译器!还是因为我正在查看最新版本的 DotNetCompilerPlatform 而发生这种情况?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多