Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 4.0 将.NET 4.0库与.NET 4.5.1项目中的其他依赖项一起使用_.net 4.0_Nuget_Mvvm Light_.net 4.5 - Fatal编程技术网

.net 4.0 将.NET 4.0库与.NET 4.5.1项目中的其他依赖项一起使用

.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

我有一个.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”的引用

错误来自一个类
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版本不匹配,您应该能够使用以下两个选项之一解决问题:

  • 更新MyLibrary以使用项目正在使用的MvvmLight的相同版本
  • 将绑定重定向添加到GalaSoft.MvvmLight的项目app.config,以便MyLibrary对它的引用映射到更高版本。如果您正在使用Visual Studio 2013并编写.NET 4.5.1桌面应用程序,则可以启用而不是更新app.config

  • 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包。