wake-up-neo.net

Der Typ 'IUnityContainer' ist in einer Assembly definiert, auf die nicht verwiesen wird

Ich habe gerade mein ASP.NET MVC/WebApi-Projekt von Microsoft.Practices.Unity 3.5.1404 auf 3.5.1406 aktualisiert (über Nuget, soeben veröffentlicht). Danach erhalte ich diesen Kompilierungsfehler:

Fehler CS0012 Der Typ 'IUnityContainer' ist in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen einen Verweis auf Assembly 'Microsoft.Practices.Unity, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' hinzufügen.

In Zeilen wie:

GlobalConfiguration.Configuration.DependencyResolver = 
    new Unity.WebApi.UnityDependencyResolver(container);

Natürlich beziehe ich mich nicht auf 3.0.0.0, sondern auf 3.5.1.0. Daher gehe ich davon aus, dass die Assembly Unity.WebApi Mit einer früheren Version der Assembly Microsoft.Practices.Unity Kompiliert wurde. Theoretisch möchten Sie das mit einer Assembly-Umleitung beheben:

  <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>

Das scheint jedoch nicht zu funktionieren.

Irgendwelche Vorschläge?

22
Ken Smith

Nun, das ist jetzt wahrscheinlich überflüssig, aber das Problem hatte anscheinend etwas mit Unity 3.5.1406 zu tun, da es heruntergezogen und durch Unity 4.0 ersetzt wurde. Ich habe auch die ältere, anscheinend nicht unterstützte Unity.WebApi-Bibliothek, die seit mehreren Jahren nicht mehr aktualisiert wurde, durch die neuere, anscheinend unterstützte Unity.AspNet.WebApi-Bibliothek ersetzt. Das ist in NuGet etwas schwierig, da bei der Suche nach "Unity WebApi" die ältere Bibliothek am Anfang der Liste angezeigt und die neuere Bibliothek am unteren Rand der ersten Seite ausgeblendet wird.

Abgesehen davon funktioniert es jetzt ohne Probleme, die ich entdeckt habe.

12
Ken Smith

Dies ist möglicherweise eine aktuellere Antwort für das Upgrade von Unity 3.5.1 auf 4.0.1.

Der Typ 'IUnityContainer' ist in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen einen Verweis auf Assembly 'Microsoft.Practices.Unity, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' hinzufügen.

Entweder über die Package Manager-Konsole oder über NuGet:

  • Deinstallieren Sie Unity.Mvc4
  • Deinstallieren Sie Unity.WebAPI
  • Update-Package Unity
  • Install-Package Unity.Mvc (Hinweis: diesmal keine Nummer im Paketnamen)
  • Installationspaket Unity.AspNet.WebApi

Code:

  • Container.RegisterTypes von Bootstrapper.cs nach App_Start/UnityConfig.cs kopiert
  • Schließen Sie Bootstrapper.cs aus dem Projekt aus
  • Bauen und ausführen
23
Robert Koch

Ich drücke dies, wenn ich ein globales update-package.

Rollback der Unity-Version über install-package Unity -version 3.5.1404 Ich habe es gelöst.

7
user326608

Sie müssen sicherstellen, dass Sie auch auf Unity.AspNet.WebApi Version 3.5.1406 aktualisieren, nicht nur auf Unity. Wenn Sie dies tun, sollte der Fehler behoben sein.

6

Ich hatte heute Morgen das gleiche Problem und deinstallierte schließlich v4.0 von Unity zusammen mit Unity.WebAPI. Installierte v3.5.1405-Vorabversion von Unity und installierte anschließend Unity.WebAPI erneut.

3
JamesIngold

Ein Grund dafür, dass die Assemblyumleitung nicht funktioniert, kann eine Änderung im Microsoft.Practices.Unity PublicKeyToken sein. Ich habe gelesen, dass zwischen Unity.3.5.1404.0 und Unity.4.0.0 das PublicKeyToken von 31bf3856ad364e35 in geändert wurde. 6d32ff45e0ccc69f . Vielleicht wurde es schon für 3.5.1406 geändert? Siehe: https://github.com/unitycontainer/unity/issues/15

3

Ich habe gerade die neueste Version von Unity Container Aus Unity 3 im April 2013 aufgespürt und das meinen Referenzen hinzugefügt. Hier ist ein Link zu einem PDF auf meinem Google Drive mit allen Schritten, die ich unternommen habe.

2
Radu Bartan