11

这应该没问题,因为 CLR 实际上并没有改变?

运行 C# 2.0 代码的机器已经推出了 .NET 3.5。

背景是我们有一个 Windows 服务(使用 VS2005 构建的 .NET 2.0 exe,部署到大约 150 台服务器),它动态加载程序集(几乎像插件)以完成要求它的各种工作项。每当我们推出新版本的总线逻辑时,我们只需将程序集放到 FTP 服务器上,Windows 服务就会知道如何检查、获取和存储最新版本。现在使用 VS2008 构建新的程序集并以 .NET 2.0 为目标,我们知道这可以正常工作。但是,我们希望开始利用 C# 3.0 语言功能(例如 LINQ)并将程序集针对 .NET 3.5,而无需构建和部署新版本的 Windows 服务。

4

3 回答 3

6

C#3 和 .Net 3.5 添加了新的程序集,但 IL 没有改变。

这意味着使用 .Net 2 程序集,您可以编译和使用 C#3,只要您不使用 Linq 或其他任何引用 System.Linq 或 System.Core

yield, var, lambda 语法、匿名类型和初始化器都是编译器的聪明之处。他们产生的 IL 是交叉兼容的。

如果您可以参考 3.5 的新程序集,它应该可以正常工作。

没有新版本的 ASP.Net - 它仍然应该是 2.0.50727 - 但您仍然应该为 3.5 编译

于 2008-08-13T06:58:35.197 回答
2

yield、var、lambda 语法、匿名类型和初始化器都是编译器的聪明之处。他们产生的 IL 是交叉兼容的。

次要的挑剔点,但产量无论如何都是 2.0 的功能。

于 2008-08-13T08:03:02.773 回答
1

这是有趣的东西。在这个论坛上有人向我建议之后,我昨天在看LinqBridge ,他们正在做类似的事情。

我觉得奇怪的是,微软将框架命名为 2.0、3.0 和 3.5,因为它们都编译下来生成 2.0 CLR 所需的相同 IL。我原以为将版本添加到 2.0 会更有意义,尽管我想也很难让人们了解存在不同版本的运行时、编译器和语言的事实。

于 2008-08-13T07:27:19.583 回答