.net 4.0 将.NET 4.0库与.NET 4.5.1项目中的其他依赖项一起使用
我有一个.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.observeObject”。必须添加对程序集“GalaSoft.MvvmLight,Version=4.4.32.18939,Culture=neutral,PublicKeyToken=null”的引用 错误来自一个类.net 4.0 将.NET 4.0库与.NET 4.5.1项目中的其他依赖项一起使用,.net-4.0,nuget,mvvm-light,.net-4.5,.net 4.0,Nuget,Mvvm Light,.net 4.5,我有一个.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\Circ
circleaderor
,该类继承自MyLibrary中定义的类,该类又继承自MVVMLight中的observateObject
这种情况“合法”吗?从.NET4.5.1项目中引用.NET4.0库可以吗?根据我的理解,应该没问题。然而,这里的问题是.NET4.0项目需要另一个依赖项,而这个依赖项在这里并不满足
另外,我注意到.NET 4.5的GalaSoft.MvvmLight的DLL版本是4.4.32.39728,而不是4.4.32.18939。在该项目中,我将此引用标记为
False
,但它没有帮助。是的,.NET 4.5.1项目使用.NET 4.0程序集是合法的。NET 4.5是对.NET 4.0的就地更新,并且是
从NuGet的角度来看,如果项目目标框架的版本小于或等于NuGet包中的程序集版本,则认为它们是兼容的。因此,NuGet将允许您将以.NET4.0为目标的NuGet包添加到以.NET4.5为目标的项目中。您不能将只针对.NET 4.5的NuGet包添加到针对.NET 4.0的项目中,因为NuGet包中的程序集可能使用.NET framework中未包含在.NET 4.0中的部分
安装包时,NuGet将选择NuGet包包含的与您的项目兼容的.NET framework的最高版本
如果GalaSoft.MvvmLight版本不匹配,您应该能够使用以下两个选项之一解决问题:
4.0依赖性是可以的。依赖于一个库的两个完全不同的版本是不好的。他会烧死你的,谢谢。1.MyLibrary使用的MvvmLight版本与MyProject相同。但是,MvvmLight的NuGet包包含到.NET 4.0和.NET 4.5的不同DLL版本。。。2.绑定不是只针对运行时吗?我有一个编译问题…你是对的。绑定不会修复编译时错误。需要修复NuGet包,否则无法使用NuGet,必须通过绕过NuGet使用正确的程序集。可能值得在MvvmLight codeplex站点上报告此问题。如果您不在MyProject的同时编译MyLibrary,则绑定重定向可能会起作用。让MyProject直接引用程序集或将其打包为您自己的NuGet包。这是一个解决办法。实际上,应该更新NuGet包。