gpt4 book ai didi

.net - 如何告诉 Roslyn C# 编译器使用特定版本的 .NET?

转载 作者:行者123 更新时间:2023-12-01 23:27:05 25 4
gpt4 key购买 nike

我发现 csc.exe Roslyn 附带的二进制文件可以使用 -langversion:<string>命令行参数以设置我想要编译的 C# 版本。但是如何选择我希望编译器使用的 .NET 版本?

编译过程适用于我使用一些 .NET SQL Server 功能的简单测试程序,所以我知道编译器以某种方式在我的计算机上使用了 .NET 版本。我的 C:\Windows\Microsoft.NET\Framework目录中有多个版本的 .NET,我假设编译器正在使用其中之一。我想明确设置编译器在编译我的程序时使用哪个版本的 .NET。

注意:如果您能详细说明编译器如何首先选择一个版本,那也将不胜感激。

最佳答案

简短的回答是你的关系是错误的:csc.exe取决于 Roslyn,反之亦然。

长答案需要一个简短的历史课:

最初在 .NET 框架中,csc.exe是一个独立的二进制文件,负责将 C# 源代码编译为 IL。但它是不透明的,它的命令行界面限制了调用它所能实现的目标。

微软推出了 System.CodeDom命名空间和类作为他们自己的工具生成代码的一种方式(例如 Visual Studio 中的 Windows 窗体设计器),但几乎每个人都开始使用它,因为它比 csc.exe 好几英里.然而,考虑到它的创建目的,CodeDOM 受到许多限制和边缘情况的影响,这使得它不太适合某些非编译任务 - 最终它只是调用 csc.exe生成编译代码。

最终,这种方法无法满足 Microsoft 在其旗舰 IDE 中更好地静态分析代码的需求。为了实现这一要求,需要一个新的 API,微软意识到,如果他们将其设计为普通开发人员可以访问,他们可以一石激起二鸟。于是 Roslyn 项目诞生了:一整套独立完整的 API,任何人都可以使用,从而满足开发人员和 Visual Studio 的需求。

最终的结果是所有的逻辑都存在于csc.exe迁移到 Roslyn 的 API,以及 the way those APIs are invoked确定将使用什么 C# 语言版本。路过-langversioncsc.exe/p:TargetFrameworkVersionmsbuild.exe最终设置 Roslyn 语言版本进行编译,但没有什么能阻止您创建自己的 Roslyn 编译实例来实现相同的目标。

引用:https://stackoverflow.com/a/7854697/70345

关于.net - 如何告诉 Roslyn C# 编译器使用特定版本的 .NET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58082820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com