类型 'IUnityContainer' 在未引用的程序集中定义
The type 'IUnityContainer' is defined in an assembly that is not referenced
我刚刚将我的 ASP.NET MVC/WebApi 项目从 Microsoft.Practices.Unity 3.5.1404 升级到 3.5.1406(通过 nuget,刚刚发布)。之后,我得到了这个编译错误:
Error CS0012 The type 'IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly '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>
然而,这似乎不起作用。
有什么建议吗?
您需要确保还升级到 Unity.AspNet.WebApi 版本 3.5.1406,而不仅仅是 Unity。如果这样做,错误应该会消失。
我今天早上遇到了同样的问题,最终连同 Unity.WebAPI 一起卸载了 Unity v4.0。安装了 Unity v3.5.1405-prerelease,然后重新安装 Unity.WebAPI。
好吧,这现在可能是多余的,但这个问题显然与 Unity 3.5.1406 有关,因为它被撤下并被 Unity 4.0 取代。我还替换了几年未更新的较旧的、显然不受支持的 Unity.WebApi 库,并将其替换为较新的、显然受支持的 Unity.AspNet.WebApi 库。这在 NuGet 中有点棘手,因为在列表顶部搜索 "Unity WebApi" returns 旧库,并将较新的库隐藏在第一页底部。
除此之外,它现在可以正常工作,没有我发现的任何问题。
我在 运行 全局 update-package
时点击了这个。
通过 install-package Unity -version 3.5.1404
回滚 Unity 版本解决了它。
错误 1 在未引用的程序集中定义类型 'Microsoft.Practices.Unity.IUnityContainer'。您必须添加对程序集 'Microsoft.Practices.Unity, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 的引用。
ANSWER-Only 对于此错误,只需打开 -> 程序包管理器控制台并键入
下午> update-package
这可能是关于如何从 Unity 3.5.1 升级到 4.0.1 的更新答案。
The type 'IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Unity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
通过包管理器控制台或 NuGet:
- 卸载Unity.Mvc4
- 卸载Unity.WebAPI
- Update-Package团结
- Install-Package Unity.Mvc(注意:这次包名没有数字)
- Install-Package Unity.AspNet.WebApi
代码:
- 已将 container.RegisterTypes 从 Bootstrapper.cs 复制到 App_Start/UnityConfig.cs
- 从项目中排除 Bootstrapper.cs
- 构建并运行
程序集重定向不起作用的一个原因可能是 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
我刚刚找到了 Unity Container
的最新版本,即 2013 年 4 月发布的 Unity 3,并将其添加到我的参考资料中。
我刚刚将我的 ASP.NET MVC/WebApi 项目从 Microsoft.Practices.Unity 3.5.1404 升级到 3.5.1406(通过 nuget,刚刚发布)。之后,我得到了这个编译错误:
Error CS0012 The type 'IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly '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>
然而,这似乎不起作用。
有什么建议吗?
您需要确保还升级到 Unity.AspNet.WebApi 版本 3.5.1406,而不仅仅是 Unity。如果这样做,错误应该会消失。
我今天早上遇到了同样的问题,最终连同 Unity.WebAPI 一起卸载了 Unity v4.0。安装了 Unity v3.5.1405-prerelease,然后重新安装 Unity.WebAPI。
好吧,这现在可能是多余的,但这个问题显然与 Unity 3.5.1406 有关,因为它被撤下并被 Unity 4.0 取代。我还替换了几年未更新的较旧的、显然不受支持的 Unity.WebApi 库,并将其替换为较新的、显然受支持的 Unity.AspNet.WebApi 库。这在 NuGet 中有点棘手,因为在列表顶部搜索 "Unity WebApi" returns 旧库,并将较新的库隐藏在第一页底部。
除此之外,它现在可以正常工作,没有我发现的任何问题。
我在 运行 全局 update-package
时点击了这个。
通过 install-package Unity -version 3.5.1404
回滚 Unity 版本解决了它。
错误 1 在未引用的程序集中定义类型 'Microsoft.Practices.Unity.IUnityContainer'。您必须添加对程序集 'Microsoft.Practices.Unity, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 的引用。
ANSWER-Only 对于此错误,只需打开 -> 程序包管理器控制台并键入
下午> update-package
这可能是关于如何从 Unity 3.5.1 升级到 4.0.1 的更新答案。
The type 'IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Unity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
通过包管理器控制台或 NuGet:
- 卸载Unity.Mvc4
- 卸载Unity.WebAPI
- Update-Package团结
- Install-Package Unity.Mvc(注意:这次包名没有数字)
- Install-Package Unity.AspNet.WebApi
代码:
- 已将 container.RegisterTypes 从 Bootstrapper.cs 复制到 App_Start/UnityConfig.cs
- 从项目中排除 Bootstrapper.cs
- 构建并运行
程序集重定向不起作用的一个原因可能是 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
我刚刚找到了 Unity Container
的最新版本,即 2013 年 4 月发布的 Unity 3,并将其添加到我的参考资料中。