在 .NET 2.0 上使用 .NET 3.5 功能......并且它有效吗?

Posted

技术标签:

【中文标题】在 .NET 2.0 上使用 .NET 3.5 功能......并且它有效吗?【英文标题】:Using .NET 3.5 features on .NET 2.0.... and it's working? 【发布时间】:2011-10-07 12:29:55 【问题描述】:

我的 .NET 应用程序作为 C++ MFC 桌面应用程序的插件运行,该应用程序提供 .NET SDK。主应用程序负责在加载任何插件之前加载 .NET。我正在针对 .NET 3.5 编译我的项目,以下测试代码运行良好:

    MainApp.WriteLine("MyPlugin running on .NET 0.1", _
                       System.Environment.Version.Major, _
                       System.Environment.Version.Minor)

    Dim data As Int32() = New Int32() 1, 1, 1, 1, 4, 4, 4, 4, 12, 12, 12, 12
    For Each distinctValue As Int32 In data.Distinct()
      MainApp.Write(distinctValue.ToString() & ", ")
    Next

这是 应该 只在 .NET 3.5 上运行的 Linq 代码,对吗?但是,当它打印版本消息时,它声称“MyPlugin 在 .NET 2.0 上运行”

如果已安装 .NET 3.5,为什么/如何工作?我能否依靠它始终工作?

【问题讨论】:

【参考方案1】:

据推测,它报告的是 .NET 的核心版本,即 2.0。直到4.0版本才更新,因为核心代码是一样的。

【讨论】:

啊哈,那我该如何测试 /actual/ 版本呢? 哪个实际版本? .NET 运行时的实际 版本是2.0。 .NET 的更高版本(3.0 和 3.5,包括服务包)不是运行时环境的新版本,只是新的库和一些编译器技巧。如果您愿意,请尝试使用仅在 .NET 3.5 库中定义的类型,如果不可用,则会引发异常。 我想 actual 版本是用户下载和安装的版本。目前为 2.0、3.0、3.5 或 4.0。这是我的客户认为的版本,因为这是他们在微软网页上看到的版本。因此,如果有人 only 安装了 2.0,我需要消息读取“2.0”,如果有人 only 安装了 3.5,我需要消息读取“3.5”。如果有人同时安装了两者,我想知道当前实际加载了两者中的哪一个。如果需要,我会使用您的解决方案,但很难相信如果不抛出异常就无法获得这些信息。【参考方案2】:

.net 3.5 中的某些功能只是语法糖,编译器将它们编译为可以由 2.0 运行时执行的 MSIL。 因此,您的开发机器上只需要 VS 2008 和 .net 3.5,但运行已编译应用程序的机器只需要 2.0 运行时。

请在此处查看此问题:What features of .NET 3.5 can be used in a .NET 2.0 application?

【讨论】:

以上是关于在 .NET 2.0 上使用 .NET 3.5 功能......并且它有效吗?的主要内容,如果未能解决你的问题,请参考以下文章

.NET 紧凑框架向后兼容 3.5 和 2.0

将 .NET 3.5 库与应用程序捆绑在一起,因此它可以在仅安装 .NET 2.0 的机器上运行?

与 .NET 2.0/3.5 一起使用的最佳免费 ORM 工具 [关闭]

当 Mono 支持 .NET 3.5 时,为啥 Unity 使用 .NET 2.0?

.NET Framework 3.5 的 .NET Framework 2.0 SDK 的等效项是啥?

.Net 2.0 与 .Net 3.5 的性能对比