2015-09-30 7 views
14

Ich habe gerade mein ASP.NET MVC/WebApi-Projekt von Microsoft.Practices.Unity 3.5.1404 auf 3.5.1406 aktualisiert (via nuget, gerade veröffentlicht). Danach erhalte ich diesen Compiler-Fehler:Der Typ 'IUnityContainer' ist in einer Assembly definiert, die nicht referenziert wird.

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

Auf Zeilen wie:

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

Natürlich, ich bin Referenzierung nicht 3.0.0.0, aber 3.5.1.0. Also meine Annahme ist, dass die Unity.WebApi Assembly gegen eine frühere Version der Microsoft.Practices.Unity Assembly kompiliert wurde. Theoretisch müssen Sie, dass bei einer Montage Umleitung beheben mögen, etwa so:

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

jedoch nicht zu funktionieren scheint.

Irgendwelche Vorschläge?

Antwort

8

Nun, das ist wahrscheinlich jetzt überflüssig, aber das Problem hatte anscheinend etwas mit Unity 3.5.1406 zu tun, da dieses heruntergezogen und durch Unity 4.0 ersetzt wurde. Ich ersetzte auch die ältere, anscheinend nicht unterstützte Unity.WebApi-Bibliothek, die seit einigen Jahren nicht mehr aktualisiert wurde, und ersetzte sie durch die neuere, anscheinend unterstützte Unity.AspNet.WebApi-Bibliothek. Das ist in NuGet etwas schwierig, da eine Suche nach "Unity WebApi" die ältere Bibliothek am Anfang der Liste zurückgibt und die neuere Bibliothek am unteren Rand der ersten Seite versteckt.

Zwischen all dem funktioniert es jetzt, ohne irgendwelche Probleme, die ich entdeckt habe.

+1

und 'Unity.Mvc' anstelle von' Unity.Mvc4'. Genaue Schritte in Rob beantworten unter http://Stackoverflow.com/a/35043239/1011959 –

5

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

+0

Sie haben Recht, das sollte es gelöst haben. Aber es scheint nicht zu haben. Ich habe das alte (veraltete?) Unity.WebApi-Projekt anstelle des neueren Unity.AspNet.WebApi-Projekts verwendet. Aber auch nach dem Update auf das richtige Projekt bekomme ich immer noch den Fehler. Oder eine ähnliche: Jetzt beschweren sie sich, dass es Version 3.5.0.0 benötigt. Ich bekomme auch den gleichen Fehler in Zeilen, die auf Klassen in der Microsoft.Practices.Unity.Mvc-Assembly verweisen. –

+1

Unity.WebApi ist ein Open-Source-Projekt, das die Integration von Unity IOC mit MVC-Projekten ermöglicht. Allerdings scheint es seit 2013 nicht aktualisiert worden zu sein, also würde ich wahrscheinlich davon abrücken, dies zu verwenden. Für meine Projekte verwende ich Microsofts Unity/Unity.MVC in Verbindung mit Unity.AspNet.WebApi. Ich hatte anscheinend keine Probleme, diese zu installieren. –

+0

Kann es sich um ein Paketmanager/Abhängigkeitsreihenfolge-Installationsproblem handeln? Vielleicht eine saubere Installation auf einer Testanwendung ausprobieren? –

3

Ich hatte das gleiche Problem heute Morgen, endete mit der Deinstallation von v4.0 von Unity zusammen mit Unity.WebAPI. Installierte v3.5.1405-Prelease von Unity und installierte Unity.WebAPI neu.

+0

Woah. Unity 3.5.1406 wurde anscheinend aus Nuget entfernt. Interessant. Ich sehe nur 3.5.1405-Prelease und 4.0. Interessant. Ich werde es erneut mit den verschiedenen 4.x-Varianten versuchen (die verschiedenen zugehörigen Pakete werden alle auf diese Version aktualisiert) und sehen, was passiert. –

+0

Das gleiche hier mit einem Web-Projekt von mir, endete ich update das Update auch, werde warten, bis MS aufwachen. –

5

Ich traf dies bei der Ausführung einer globalen update-package.

Das Zurücksetzen der Unity-Version über install-package Unity -version 3.5.1404 löste es.

+1

Nach einer Menge Probleme, ich habe die genaue Lösung, dank user326608 – Ajay

1

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

ANTWORT-Nur für diesen Fehler nur OPEN-> Package Manager-Konsole und Typen

PM> update-Paket

12

Dies könnte eine aktuellere Antwort sein, wie von Unity 3.5.1 auf 4.0 aktualisieren .1.

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

Entweder über Paket-Manager-Konsole oder NuGet:

  • Deinstallieren Unity.Mvc4
  • Deinstallieren Unity.WebAPI
  • -Update-Package Unity
  • Install-Package Unity.Mvc (Anmerkung: keine Nummer in Paketnamen diesmal)
  • Install-Package Unity.AspNet.WebApi

Code:

  • Kopierte container.RegisterTypes von Bootstrapper.cs zu App_Start/UnityConfig.cs
  • Bootstrapper.cs von Projekt ausschließen
  • und
  • Build-Run
+0

Das ist, was mir geholfen hat. Vielen Dank. –

3

Ein Grund für die Montage Redirect funktioniert nicht eine Änderung der Microsoft.Practices.Unity PublicKeyToken sein könnte. Ich habe gelesen, dass zwischen den Unity.3.5.1404.0 und Unity.4.0.0 der PublicKeyToken von 31bf3856ad364e35 zu 6d32ff45e0ccc69f geändert wurde. Vielleicht wurde es bereits für 3.5.1406 geändert? Siehe: https://github.com/unitycontainer/unity/issues/15

2

Ich habe gerade die neueste Version der Unity Container aufgespürt, die Unity 3 im April 2013 war und diese zu meinen Referenzen hinzugefügt. Hier ist ein Link zu einer PDF on my Google Drive Detaillierung aller Schritte, die ich gemacht habe.

+0

Willkommen bei Stack Overflow! Bitte geben Sie immer den relevantesten Teil eines wichtigen Links an, falls die Zielseite nicht erreichbar ist oder permanent offline geschaltet wird. Vielen Dank! – dferenc

Verwandte Themen