我有一个.NET项目,其目标框架是4.5.1。这个项目依赖于一个只有.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>
标记了此引用,但它没有帮助。
答案 0 :(得分:0)
是的,.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版本不匹配,您应该可以使用以下两个选项之一来解决问题: