我可以在面向 .Net 3.5 的项目中使用所有 C# 4.0 功能吗?

Posted

技术标签:

【中文标题】我可以在面向 .Net 3.5 的项目中使用所有 C# 4.0 功能吗?【英文标题】:Can I use all C# 4.0 features in a project that targets .Net 3.5? 【发布时间】:2010-08-18 22:15:07 【问题描述】:

开发环境: - VS2010 - .Net 框架 4.0、3.5、2.0

暂存和生产环境: - .Net 框架 3.5、2.0

我正在进行的项目是针对 .Net Framework 3.5。今天我在这个项目中使用了 C#4 中新增的可选参数功能,它运行良好。我认为 VS2010 正在使用 C#4 编译器,并且正在将带有可选参数的方法编译为 IL 中相应的重载方法。

我想知道我是否也可以使用所有新的 C#4 功能。

【问题讨论】:

+1。刚试过自己,一个新的 3.5 项目允许方法中的可选参数。很棒的收获! What C# 4.0 features can be used while still targeting the .NET 3.5 runtime?的可能重复 【参考方案1】:

您不能使用dynamic 功能。这依赖于仅在 .Net 框架的 4.0 版本上可用的 C# 运行时和 DLR DLL。 DLR 的版本可用于 3.5,但我认为它们与 C# 编译器所需的版本不兼容。

此外,您不能在向下目标场景中使用 NoPIA / Embedded Interop Types。此功能需要 4.0 中添加的 CLR 支持。

Visual Studio 2010 中向下定位的优点在于您不必了解所有限制。如果您的项目设置为向下目标 3.5 并且您使用不兼容的功能,Visual Studio 将产生错误。

【讨论】:

我相信你也不能使用协方差和反方差?或者 3.5 CLR 会愉快地配合吗? @Timwi,@Dykam 是正确的,CLR 2.0 已经支持 co 和 contra 方差。这更像是对 C# 和 VB.Net 语言的错误修复。 很高兴知道 VS2010 捕获了任何不受支持的新功能。谢谢大家。【参考方案2】:

实际上,我在几周前遇到了这个问题。即使项目针对.net 3.5,我也使用了可选参数。您需要对此非常小心,因为如果您将应用程序安装在仅安装了 .net 3.5 运行时的计算机上,那么您的程序可能无法运行。就我而言,我使用了可选参数,而每晚构建服务器仅安装了 3.5,因此构建失败。

【讨论】:

您的项目使用 3.5 可能无法构建,但如果您可以使用 4 但以 3.5 成功构建它,那么编译后的代码应该 在 3.5 上运行相当愉快。

以上是关于我可以在面向 .Net 3.5 的项目中使用所有 C# 4.0 功能吗?的主要内容,如果未能解决你的问题,请参考以下文章

将目标框架从 .NET 3.5 更改为 .NET 4.0

我可以将 Windows Identity Foundation 3.5 与 .NET 4.5 一起使用吗?

如何将项目从 .NET 3.5 降级到 .NET 2.0?

新的 .NET 3.5 项目:使用哪种 DAL 技术?

从 Asp.Net 4 项目进入引用的 .Net 3.5 程序集

如何在 .NET 3.5 项目中引用 .NET 4.0 程序集