web-dev-qa-db-fra.com

Le type 'IUnityContainer' est défini dans un assembly qui n'est pas référencé

Je viens de mettre à niveau mon projet ASP.NET MVC/WebApi de Microsoft.Practices.Unity 3.5.1404 vers 3.5.1406 (via nuget, vient de sortir). Ensuite, j'obtiens cette erreur de compilation:

Erreur CS0012 Le type 'IUnityContainer' est défini dans un assembly qui n'est pas référencé. Vous devez ajouter une référence à l'assembly "Microsoft.Practices.Unity, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35".

Sur des lignes comme:

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

Bien sûr, je ne fais pas référence à 3.0.0.0, mais à 3.5.1.0. Donc, mon hypothèse est que le Unity.WebApi L'assembly a été compilé avec une version antérieure de Microsoft.Practices.Unity Assemblée. Théoriquement, vous souhaitez corriger cela avec une redirection d'assembly, comme ceci:

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

Cependant, cela ne semble pas fonctionner.

Aucune suggestion?

22
Ken Smith

Eh bien, c'est probablement superflu maintenant, mais le problème avait apparemment quelque chose à voir avec Unity 3.5.1406, car cela a été retiré et remplacé par Unity 4.0. J'ai également remplacé l'ancienne bibliothèque Unity.WebApi, apparemment non prise en charge qui n'a pas été mise à jour depuis plusieurs années, et je l'ai remplacée par la bibliothèque Unity.AspNet.WebApi, plus récente et apparemment prise en charge. C'est un peu délicat dans NuGet, car une recherche de "Unity WebApi" renvoie l'ancienne bibliothèque en haut de la liste et masque la nouvelle bibliothèque en bas de la première page.

Entre tout cela, cela fonctionne maintenant, sans aucun problème que j'ai repéré.

12
Ken Smith

Cela pourrait être une réponse plus mise à jour pour la mise à niveau de Unity 3.5.1 vers 4.0.1.

Le type 'IUnityContainer' est défini dans un assembly qui n'est pas référencé. Vous devez ajouter une référence à l'assembly "Microsoft.Practices.Unity, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35".

Soit via Package Manager Console ou NuGet:

  • Désinstaller Unity.Mvc4
  • Désinstallez Unity.WebAPI
  • Unité de mise à jour-package
  • Install-Package Unity.Mvc (remarque: aucun numéro dans le nom du package cette fois)
  • Install-Package Unity.AspNet.WebApi

Code:

  • Container.RegisterTypes copié de Bootstrapper.cs vers App_Start/UnityConfig.cs
  • Exclure Bootstrapper.cs du projet
  • Construire et exécuter
23
Robert Koch

Je frappe cela lors de l'exécution d'un global update-package.

Restauration de la version Unity via install-package Unity -version 3.5.1404 résolu.

7
user326608

Vous devez vous assurer que vous mettez également à niveau vers Unity.AspNet.WebApi version 3.5.1406, pas seulement Unity. Si vous faites cela, l'erreur devrait disparaître.

6
Leigh Shepperson

J'ai eu le même problème ce matin, j'ai fini par désinstaller la v4.0 d'Unity avec Unity.WebAPI. Installation de v3.5.1405-pré-version de Unity, puis réinstallation de Unity.WebAPI.

3
JamesIngold

Une raison pour laquelle la redirection d'assembly ne fonctionne pas pourrait être un changement dans le Microsoft.Practices.Unity PublicKeyToken. J'ai lu qu'entre Unity.3.5.1404.0 et Unity.4.0.0, le PublicKeyToken est passé de 31bf3856ad364e35 à 6d32ff45e0ccc69f . Peut-être qu'il a déjà été modifié pour 3.5.1406? Voir: https://github.com/unitycontainer/unity/issues/15

3
Frank van Eykelen

Je viens de retrouver la dernière version du Unity Container qui était Unity 3 en avril 2013 et l'a ajouté à mes références. Voici un lien vers un PDF sur mon Google Drive détaillant toutes les étapes que j'ai prises.

2
Radu Bartan