【问题标题】:How to compile if .NET version is 4 or greater如果 .NET 版本为 4 或更高版本,如何编译
【发布时间】:2012-01-13 13:11:23
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

有时我们处理这个问题的方法是创造性地使用条件编译和存根类。

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

namespace System
{
    class AggregateException: Exception
    {
    }
}

只需将此类包含在 3.5 项目中即可。

【讨论】:

    【解决方案2】:

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

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

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

    话虽如此,无论如何,这可能无法直接工作。如果您的 .NET 4 库正在捕获 AggregateException,这意味着它正在使用引发该异常的某些功能 - 该方法调用可能是 .NET 4 独有的功能,因为此异常是 .NET 4 中的新功能,通常只发生使用 TPL 之类的东西时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 2018-06-06
      • 2014-03-17
      相关资源
      最近更新 更多