【问题标题】:Reference a .net framework 4.5.1 assembly in a 4.0 project在 4.0 项目中引用 .net framework 4.5.1 程序集
【发布时间】:2014-05-22 12:51:27
【问题描述】:

如何使 4.0 项目具有 4.5 参考。在单元测试中,我无法构建解决方案,它给了我这个警告。

警告 2 无法解析主要参考“PR.Wallet” 因为它是针对“.NETFramework,Version=v4.5.1”构建的 框架。这是比当前目标更高的版本 框架“.NETFramework,版本=v4.0”。 PR.Wallet.Tests

【问题讨论】:

标签: c# .net


【解决方案1】:

.Net 框架(v2.0 或更高版本) 不是 forward compatible. 。您不能在 .Net 4.0 项目中引用 .Net 4.5 程序集。

见:Version Compatibility in the .NET Framework

您可能还会看到:Version Compatibility

.NET Framework 对向后和向前的支持程度 兼容性是特定于版本的。 .NET 框架同时支持 使用创建的应用程序的向后和向前兼容性 仅 1.1 版。它不支持前向兼容性 使用 2.0 版创建的应用程序。在 .NET 的上下文中 框架,向后兼容意味着一个应用程序创建 使用早期版本的 .NET Framework 将在更高版本上运行 版本。相反,前向兼容性意味着应用程序 使用更高版本的 .NET Framework 创建的将在 较早的版本。

.NET Framework 提供高度支持 为了向后兼容。例如,大多数应用程序创建 使用 1.0 版将在 1.1 版上运行,应用程序使用 1.1 版将在 2.0 版上运行。 .NET 框架还支持 仅针对 1.1 版的前向兼容性。然而,对于前 兼容性,您可能需要修改应用程序,以便 应用程序按预期运行。使用 2.0 版创建的应用程序 不会在早期版本的 .NET Framework 上运行。对彼此而言 向后和向前兼容性,对 .NET Framework 的更改 有助于提高安全性、正确性或功能性的 引发兼容性问题。

【讨论】:

    【解决方案2】:

    听起来您需要更改库的框架。而且由于它只是一个单元测试项目,我不明白你为什么不这样做。

    在 Visual Studio 中:

    • 右键单击您的项目
    • 选择属性
    • 选择应用程序选项卡
    • 将目标框架更改为所需的框架

    如果您没有看到 .NET Framework 4.5.1 作为选项,请确保已安装它。

    【讨论】:

    • 好吧,如果它在测试中不起作用,它不会在实际中起作用吗?
    • 我阅读错误的方式是您的 PR.Wallet 的目标是 4.5.1,而 PR.Wallet.UnitTests 的目标是 4.0。如果您将测试项目延迟到 4.5.1,您应该能够加载库。
    【解决方案3】:

    您无法在以 4.0 为目标的项目中引用 4.5.1 程序集。 但是...您可以通过动态调用以 4.0 为目标的项目中调用 4.5.1 程序集的方法,假设已安装 4.5.1:

    var assembly= Assembly.LoadFrom(...);
    var type = assembly.GetType(...);
    var method = type.GetMethod(...);
    var res = method.Invoke(null, args);
    

    请注意,这种方法可能存在局限性,但我发现它对于在仍使用 VS2010 的同时调用 Roslyn 例程很有用。

    【讨论】:

    • 你能说明如何使用外部 dll 调用另一个类方法吗?
    【解决方案4】:

    可能会有例外。例如,根据我自己的经验,TagLib-Sharp 2.2.0(您可以从 NuGet 下载)等一些库完全允许我从运行的 .NET 4.0(完整配置文件的客户端)项目中引用它的 .NET 4.5 DLL在 Visual Studio 2010 上。

    此外,从上述引用的 .NET 4.5 DLL 调用某些方法没有发出任何警告或错误,但构建过程很好,包括在运行时。但是,一些方法/函数失败了,所以这是一个偶然的机会,但请记住引用 .NET 4.5 DLL 是成功的。所以上面关于“前向兼容性”上下文的答案和一般规则在特定情况下显然有一些例外,比如 TagLib-Sharp。

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多