如何创建支持(生成代码)不同运行时(2.0和4.0)的.NET C#项目?

时间:2013-06-26 10:39:17

标签: c# .net .net-4.0 .net-2.0

是否可能,如果是,那么我该怎么做呢,创建一个可以为2.0和4.0 .NET编译的.NET项目(在C#中)。

我需要什么:

我想创建一个包含C#4.0中可用功能的项目,但使用这些功能是可选的。如果项目是针对.NET 4.0编译的,则这些功能处于活动状态并已编译。在编译2.0时,功能将被删除并省略。

我想有一个构建过程,这意味着当我单击VS中的“构建”按钮时,该项目是为2.0和4.0构建的,用于创建分离的程序集和可执行文件。

如何配置我的项目和代码以达到此要求?

3 个答案:

答案 0 :(得分:1)

您可以放置​​仅在.NET 4中编译的代码 在单独的dll中,加载相关的类,方法等。 通过反思。

因此,假设您有一种“有时”需要启动新任务的方法= 你应该把任务hadeling放在单独的dll中, 如果版本合适,你可以从dll加载类并通过反射运行它的方法。

你应该只编译.net2中的代码和.net4中的外部dll。

在运行时,您可以根据配置值决定是否加载.net4 dll, 或者如果你想通过检查计算机上是否安装了.net i: Is there an easy way to check the .NET Framework version?

答案 1 :(得分:1)

我是如何做到这一点的是#define。我有两个C#项目。一个名为Assembly-2.csproj,一个名为Assembly-4.csproj。 -2项目有一个名为NET2条件编译符号(这存储在构建项目设置中),-4项目有一个名为{{1 }}。然后,在代码中我执行以下操作:

NET4

如果使用此机制,请务必在应用程序中重命名程序集名称。在这种情况下,我会调用程序集resp。 #if NET2 public static void MyExtensionMethod(string self) #else public static void MyExtensionMethod(this string self) #endif { // ... Assembly-2。您也可以跳过此步骤,但如果它们具有不同的名称并且名称显示它们所用的框架版本,我发现实际管理程序集要容易得多。

答案 2 :(得分:0)

如果使用.Net 2.0,则可以使用其他版本(3.5,4.0,4.5)编译代码,因为较新的版本已包含旧版本(但未删除的函数 - 错误)!

编辑但是如果您使用.Net 4.0,则无法在2.0等旧版本中编译它,因为4.0中的某些特定功能无法在2.0中使用...