Тип "IUnityContainer" определен в сборке, на которую не ссылаются
Я только что обновил свой проект 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>
Однако это не работает.
Любые предложения?
Ответы
Ответ 1
Ну, это, вероятно, сейчас лишнее, но проблема, видимо, имела какое-то отношение к Unity 3.5.1406, так как это было снято и заменено Unity 4.0. Я также заменил более старую, по-видимому, неподдерживаемую библиотеку Unity.WebApi, которая не обновлялась за несколько лет, и заменила ее на новую, по-видимому, поддерживаемую библиотеку Unity.AspNet.WebApi. Это немного сложно в NuGet, так как поиск "Unity WebApi" возвращает более старую библиотеку в верхней части списка и скрывает новую библиотеку от нижней части первой страницы.
Между тем это работает сейчас, без каких-либо проблем, которые я заметил.
Ответ 2
Это может быть более обновленный ответ о том, как обновить с Unity 3.5.1 до 4.0.1.
Тип "IUnityContainer" определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку "Microsoft.Practices.Unity, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35".
Либо через консоль диспетчера пакетов, либо через NuGet:
- Удалить Unity.Mvc4
- Удалить Unity.WebAPI
- Unity пакета обновления
- Install-Package Unity.Mvc(обратите внимание: на этот раз в имени пакета нет номера)
- Install-Package Unity.AspNet.WebApi
код:
- Скопированный контейнер .RegisterTypes из Bootstrapper.cs в App_Start/UnityConfig.cs
- Исключить Bootstrapper.cs из проекта
- Сборка и запуск
Ответ 3
Вам нужно также убедиться, что вы также обновили до Unity.AspNet.WebApi версии 3.5.1406, а не только Unity. Если вы это сделаете, ошибка должна исчезнуть.
Ответ 4
Я ударил это при запуске глобального update-package
.
Откат версии Unity с помощью install-package Unity -version 3.5.1404
разрешил ее.
Ответ 5
У меня была такая же проблема сегодня утром, в результате была удалена v4.0 Unity вместе с Unity.WebAPI. Установлен v3.5.1405-prelease Unity, а затем снова установлен Unity.WebAPI.
Ответ 6
Причиной перенаправления сборки не может быть изменение в 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
Ответ 7
Я только что просмотрел последний выпуск Unity Container
, который был Unity 3 в апреле 2013 года, и добавил это к моим ссылкам. Вот ссылка на PDF на моем Диске Google, в котором подробно описаны все шаги, которые я предпринял.
Ответ 8
Ошибка 1 Тип "Microsoft.Practices.Unity.IUnityContainer" определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку "Microsoft.Practices.Unity, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35".
ANSWER - Только для этой ошибки только OPEN- > Консоль диспетчера пакетов и введите
PM > пакет обновления