如果.NET版本为4或更高版本,如何编译

时间:2011-12-05 20:22:20

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

我有一个来自项目A(.NET 4)的类,它使用AggregateException类。我现在将这个相同的类导入到项目B中,这是我的.NET 3.5。 3.5的AggregateException类不存在。有没有办法使用#if和反射或某些东西来忽略catch(AggregateException),如果它所在的项目不是.NET 4?

2 个答案:

答案 0 :(得分:1)

否 - 如果要从.NET 3.5应用程序中使用它,则需要创建一个针对.NET 3.5的单独版本的项目。

您无法从.NET 3.5加载.NET 4程序集,即使您不使用.NET 4功能。

如果您希望将文件设置为基于平台目标进行定义,则#if指令可能有用的唯一位置。这必须发生在Project A项目中的文件内部,并且您需要两个项目(可能包含相同的源文件),因为单个项目无法设置为针对两个单独的框架版本。 (你总是可以改变框架,但这并不总是微不足道的......)

话虽如此,反正可能不会直接起作用。如果您的.NET 4库正在捕获AggregateException,这意味着它正在使用一些引发该异常的功能 - 该方法调用可能仅是.NET 4的一项功能,因为此异常是.NET 4中的新增功能,通常是只有在使用类似TPL的东西时才会出现。

答案 1 :(得分:0)

我们处理此问题的方式有时是通过创造性地使用条件编译和存根类。

在你的情况下,我们可能会做的是添加一个存根类,如:

namespace System
{
    class AggregateException: Exception
    {
    }
}

并在3.5项目中包含此类。