Roslyn and .NET Runtime version
是否可以在.NET运行时的旧版本(例如.NET 4.0)中使用Roslyn编译器和C 6.0的新功能?
例如,我希望在.NET 4.0应用程序中使用bodied成员(int S => x + y;而不是int S { get { return x + y; } }表达式。
- 你会怎么想?
- 编译器如何将它不知道的方法(因为它在创建时不存在)编译到IL?
- 相对来说,这是可能的,因为这可以完全通过编译器支持实现,并发出可以运行4.0clr的IL。就像使用C 3.0编译器编译.NET 2.0项目时可以使用自动属性一样。stackoverflow.com/questions/9393982/…
- 你试过了吗?主要构造函数为我工作,用于一个面向.NET 3.5的项目。
- @乔治斯托克,你会怎么想?除非该功能需要由.NET运行时中的更改(如async/await)支持,否则没有理由不应在旧的.NET运行时使用它。
- 这些纯粹是句法特征。
新的C 6.0功能不依赖于框架支持,所以是的,如果您首先指定要在项目文件中以.NET 4.0为目标,那么使用C 6.0编译器编译的应用程序将在.NET 4.0上运行。
- 自从6月以来,情况有什么变化吗?我们仍然可以在.NET 4.0中使用新的编译器?
- 仍然是这样,在这一点上,C 6.0相当地被锁定,所以它不太可能改变。
- 谢谢你的更新。在其他地方找不到此信息。我们的客户仍然需要XP支持,我很高兴看到我们可以升级到Roslyn
- 即使C 6.0确实与较新版本的框架有关联,编译器仍然支持编译到较旧版本的语言的标志。因此,在这种假设的情况下,您将无法使用语言特性,但仍然可以获得Roslyn的"其他"好处。
- 答案给人的印象是C编译器在.NET 4.0上运行没有问题,实际上它不是受支持的平台。
- 问题不是关于编译器,而是关于应用程序是否可以降低目标。我修改了我的答案文本,希望能让它不那么模棱两可。
- 答案至少有一个例外。如果您的应用程序使用DynamicMethod.CreateDelegate(类型),当使用C_6编译时,它将不会在框架4.0上运行。异常为"找不到方法:"System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type)
- 但是,您的项目文件是否实际指定要以.NET 4.0为目标?如果在项目中仍以较新版本为目标,则所有赌注都将关闭。
到目前为止,Roslyn C编译器和工具无法在.NET 4.0上运行
当然可以交叉编译.NET 4.0,但要运行编译器本身,至少需要.NET 4.5