【问题标题】:Using .NET 4.0 library with other dependencies from a .NET 4.5.1 project将 .NET 4.0 库与 .NET 4.5.1 项目中的其他依赖项一起使用
【发布时间】:2014-06-23 17:02:41
【问题描述】:

我有一个目标框架为 4.5.1 的 .NET 项目。这个项目依赖于一个只有 .NET 4.0 版本的 NuGet 库,而这个库又依赖于 MVVMLight:

MyProject (4.5.1) --> 依赖于 MyLibrary (4.0) --> 依赖于 MVVMLight (4.0)

MVVMLight NuGet 也有 4.5 版本,因此当它安装在 MyProject 上时,它最终会引用 4.5 版本(与使用 MVVMLight for .NET 4.0 编译的 MyLibrary 不同)。

这会导致以下编译错误:

5>...\Adorners\CircleAdorner.cs(19,18,19,31):错误 CS0012:类型“GalaSoft.MvvmLight.ObservableObject”在未引用的程序集中定义。您必须添加对程序集“GalaSoft.MvvmLight, Version=4.4.32.18939, Culture=neutral, PublicKeyToken=null”的引用。

错误来自一个类 CircleAdorner,它继承自 MyLibrary 中定义的一个类,而该类又继承自 MVVMLight 的 ObservableObject

这种情况“合法”吗?从 .NET 4.5.1 项目中引用 .NET 4.0 库可以吗?据我了解应该没问题。但是,这里的问题是 .NET 4.0 项目需要另一个在这里不满足的依赖项。

另外,我注意到 .NET 4.5 的 GalaSoft.MvvmLight 的 DLL 版本是 4.4.32.39728 而不是 4.4.32.18939。在项目中,我用<SpecificVersion>False</SpecificVersion> 标记了这个引用,但它没有帮助。

【问题讨论】:

  • 4.0 的依赖关系很好。依赖于两个完全不同版本的库是不好的。 DLL Hell 会烧死你。

标签: .net-4.0 nuget mvvm-light .net-4.5


【解决方案1】:

是的,.NET 4.5.1 项目使用 .NET 4.0 程序集是合法的。 .NET 4.5 是对 .NET 4.0 的就地更新,是backward compatible

从 NuGet 的角度来看,如果项目的目标框架版本小于或等于 NuGet 包中的程序集版本,则它们被认为是兼容的。因此,NuGet 将允许您将面向 .NET 4.0 的 NuGet 包添加到面向 .NET 4.5 的项目中。您不能将仅针对 .NET 4.5 的 NuGet 包添加到针对 .NET 4.0 的项目中,因为 NuGet 包中的程序集可能会使用 .NET 4.0 未包含的部分 .NET 框架。

安装包时,NuGet 将选择 NuGet 包包含的与您的项目兼容的 .NET 框架的最高版本。

如果您的 GalaSoft.MvvmLight 版本不匹配,您应该可以使用以下两个选项之一来解决问题:

  1. 更新 MyLibrary 以使用与您的项目相同的 MvvmLight 版本。
  2. 为 GalaSoft.MvvmLight 添加绑定重定向到项目的 app.config,以便 MyLibrary 对它的引用映射到更高版本。如果您使用 Visual Studio 2013 并编写 .NET 4.5.1 桌面应用程序,则可以启用 automatic binding redirects 而无需更新 app.config。

【讨论】:

  • 谢谢。 1. MyLibrary 使用与 MyProject 相同版本的 MvvmLight。但是,MvvmLight 的 NuGet 包包含不同的 .NET 4.0 和 .NET 4.5 的 DLL 版本... 2. 绑定不是仅用于运行时吗?我有一个编译问题...
  • 你是对的。绑定不会修复您的编译时错误。 NuGet 包需要修复,否则您将无法使用 NuGet,并且必须通过绕过 NuGet 来使用正确的程序集。可能值得在 MvvmLight codeplex 网站上报告这个问题。
  • 如果您没有与 MyProject 同时编译 MyLibrary,绑定重定向可能会起作用。让 MyProject 直接引用程序集或将其打包为您自己的 NuGet 包。这是一种解决方法。确实应该更新 NuGet 包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 2017-07-18
  • 2016-11-26
相关资源
最近更新 更多