3

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

我需要的:

我想创建一个具有 C# 4.0 中可用功能的项目,但使用这些功能是可选的。如果项目是为 .NET 4.0 编译的,则这些特性是活动的并被编译进去。当为 2.0 编译时,这些特性被转出并省略。

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

我如何配置我的项目和我的代码来实现这个要求?

4

3 回答 3

1

You can place your code which only compiles in .NET 4 in seperate dll, load the relevant classes, methods etc.. by reflection.

So let's say you have a method which "sometimes" need to start a new task= You should put the task hadeling in seperate dll, if the version is suitable, you can than load the class from the dll and run its method by reflection.

you should compile your code in .net2 only and the external dll in .net4 only.

In runtime you decide if you load the .net4 dll or not based on a configuration value, or if you want by checking if the computer has .net i installed on it: Is there an easy way to check the .NET Framework version?

于 2013-06-26T10:47:03.887 回答
1

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

#if NET2
public static void MyExtensionMethod(string self)
#else
public static void MyExtensionMethod(this string self)
#endif
{
    // ...

如果您使用此机制,请务必在Application中重命名程序集名称。在这种情况下,我会分别调用程序集。Assembly-2Assembly-4。您也可以跳过这一步,但我发现如果程序集具有不同的名称并且名称显示它们所用的框架版本,那么实际管理它们会容易得多。

于 2013-06-26T11:18:55.750 回答
0

如果您使用 .Net 2.0,您可以使用其他版本(3.5、4.0、4.5)编译您的代码,因为新版本已经包含旧版本(但未删除功能错误)!

编辑:但是如果你使用 .Net 4.0,你不能在像 2.0 这样的旧版本中编译它,因为 4.0 中的某些特定功能在 2.0 中不可用......

于 2013-06-26T10:45:06.553 回答