我刚刚将我的ASP.NET MVC / WebApi项目从Microsoft.Practices.Unity 3.5.1404升级到3.5.1406(通过nuget,刚刚发布)。之后,我收到了这个编译错误:
错误CS0012类型“IUnityContainer”在未引用的程序集中定义。您必须添加对程序集“Microsoft.Practices.Unity,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”的引用。
在以下几行:
GlobalConfiguration.Configuration.DependencyResolver =
new Unity.WebApi.UnityDependencyResolver(container);
当然,我没有引用3.0.0.0,而是引用3.5.1.0。所以我的假设是Unity.WebApi
程序集是针对早期版本的Microsoft.Practices.Unity
程序集编译的。从理论上讲,您需要使用程序集重定向来修复它,如下所示:
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.1.0" newVersion="3.5.1.0" />
</dependentAssembly>
然而,这似乎不起作用。
有什么建议吗?
答案 0 :(得分:20)
对于如何从Unity 3.5.1升级到4.0.1,这可能是一个更新的答案。
类型&#39; IUnityContainer&#39;在未引用的程序集中定义。您必须添加对程序集的引用&quot; Microsoft.Practices.Unity,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35&#39;。
通过Package Manager Console或NuGet:
代码:
答案 1 :(得分:11)
嗯,现在这可能是多余的了,但这个问题显然与Unity 3.5.1406有关,因为它已被拆除,并被Unity 4.0取代。我还更换了旧的,显然不受支持的Unity.WebApi库,该库几年没有更新,并用更新的,显然支持的Unity.AspNet.WebApi库取而代之。这在NuGet中有点棘手,因为它可以搜索Unity WebApi&#34;返回列表顶部的旧库,并将较新的库隐藏在第一页底部。
在所有这些之间,它现在有效,没有任何我发现的问题。
答案 2 :(得分:7)
我在运行全局update-package
时点击此内容。
通过install-package Unity -version 3.5.1404
回滚Unity版本解决了它。
答案 3 :(得分:5)
您需要确保还升级到Unity.AspNet.WebApi版本3.5.1406,而不仅仅是Unity。如果你这样做,错误就会消失。
答案 4 :(得分:3)
今天早上我遇到了同样的问题,最终卸载了Unity的v4.0以及Unity.WebAPI。安装了Unity的v3.5.1405-prelease,然后重新安装了Unity.WebAPI。
答案 5 :(得分:3)
程序集重定向无法正常工作的原因可能是Microsoft.Practices.Unity PublicKeyToken中的更改。我在Unity.3.5.1404.0和Unity.4.0.0之间看到,PublicKeyToken从 31bf3856ad364e35 更改为 6d32ff45e0ccc69f 。也许它已经改为3.5.1406了?请参阅:https://github.com/unitycontainer/unity/issues/15
答案 6 :(得分:2)
我刚刚追踪了2013年4月Unity 3的Unity Container
的最新版本,并将其添加到我的参考资料中。这是一个PDF on my Google Drive的链接,详细说明了我采取的所有步骤。
答案 7 :(得分:-1)
错误1“Microsoft.Practices.Unity.IUnityContainer”类型在未引用的程序集中定义。您必须添加对程序集“Microsoft.Practices.Unity,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”的引用。
答案 - 仅针对此错误打开 - >打包管理器控制台并输入
PM&GT;更新包