Тип "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 > пакет обновления