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