web-dev-qa-db-fra.com

Impossible de charger l'assembly System.Web.Cors après un appel à Microsoft.Owin.Cors

Lorsque je vérifie la référence d'assemblage System.Web.Cors dans l'explorateur de solutions, Version est 5.2.3.0 . La propriété Specific Version est définie sur False. Le chemin est dans le dossier bin du projet local. Lors de la vérification des propriétés .dll à partir de l’explorateur de fichiers, la version du produit et la version du fichier. est aussi 5.2.3 .

Mon Web.config

<dependentAssembly>
    <assemblyIdentity name="System.Web.Cors" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

Mon packages.config (Je pense que l’assembly gênant est Microsoft.AspNet.WebApi.Cors, mais j’en ai inclus un autre ici avec un nom similaire):

<package id="Microsoft.AspNet.Cors" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net452" />

Une erreur est renvoyée sur cette ligne dans Startup.cs

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

Voici l'erreur complète:

System.IO.FileLoadException was unhandled by user code
  FileName=System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
  FusionLog==== Pre-bind state information ===
LOG: DisplayName = System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 (Fully-specified)
LOG: Appbase = file:///P:/project-z4a/project-z4a/
LOG: Initial PrivatePath = P:\project-z4a\project-z4a\bin
Calling Assembly : Microsoft.Owin.Cors, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: P:\project-z4a\project-z4a\web.config
LOG: Using Host configuration file: D:\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: Attempting download of new URL file:///C:/Users/*****/AppData/Local/Temp/Temporary ASP.NET Files/root/f8163156/5c96d267/System.Web.Cors.DLL.
LOG: Attempting download of new URL file:///C:/Users/*****/AppData/Local/Temp/Temporary ASP.NET Files/root/f8163156/5c96d267/System.Web.Cors/System.Web.Cors.DLL.
LOG: Attempting download of new URL file:///P:/project-z4a/project-z4a/bin/System.Web.Cors.DLL.
WRN: Comparing the Assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of Assembly (hr = 0x80131040). Probing terminated.

  HResult=-2146234304
  Message=Could not load file or Assembly 'System.Web.Cors, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)
  Source=Microsoft.Owin.Cors
  StackTrace:
       at Microsoft.Owin.Cors.CorsOptions.get_AllowAll()
       at z4a_dsa.Startup.Configuration(IAppBuilder app) in P:\project-z4a\project-z4a\Startup.cs:line 23
  InnerException: 

Donc, je peux voir qu'elle attend la version 5.0.0.0, mais je ne vois pas où et pourquoi appeler cette version.

J'ai effectué les étapes suivantes pour déboguer cette erreur. Après chacune des tentatives répertoriées, j'ai nettoyé, puis reconstruit le projet. L'erreur n'a pas changé après avoir essayé chacune de ces étapes.

  • Update-Package
  • Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors, puis Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors, puis Install-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.3
  • Transféré Microsoft.AspNet.WebApi.Cors à v5.0.0.0 via la fenêtre du gestionnaire de packages.

Je ne suis pas encore un expert en .NET, et il s’agit de la quatrième occurrence de la même erreur exacte avec un assemblage différent à chaque fois, car j’ai lancé un nouveau projet vide avec Web Api coché. Et j'ai installé le paquetage z4a-foundation-scaffold-auth dans mon projet. J'apprécierais certainement une explication de mes lacunes dans les connaissances ici!

EDIT: Utilise ILDASM.exe pour regarder Microsoft.Owin.Cors Assembly. Trouvé il a spécifié System.Web.Cors v5.0.0.0 dans sa définition de manifeste. Je suppose que ma question est maintenant comment remédier à cela?

18
Caleb Faruki

Il s'avère que System.Web.Cors.dll ne provient pas du package Microsoft.AspNet.WebApi.Cors. Cela vient du paquet Microsoft.AspNet.Cors.

Install-Package Microsoft.AspNet.Cors -Version 5.0.0

Cela a résolu l'erreur immédiate.

Au cas où vous auriez un scénario dans lequel vous auriez besoin de deux versions différentes de System.Web.Cors.dll , je suggérerais cette solution:

  1. À l'aide du gestionnaire de packages, remplacez la version de Microsoft.AspNet.Cors par celle que Microsoft.Owin.Cors demande dans sa définition de manifeste.
  2. À l’aide de l’invite de commande du développeur pour Visual Studio (exécutée en tant qu’administrateur), accédez au dossier du package pour le Microsoft.AspNet.Cors récemment mis à jour où réside le * System.Web.Cors.dll **.
  3. Exécutez la commande suivante: gacutil -i System.Web.Cors.dll.
  4. Retournez dans le gestionnaire de paquets et remplacez Microsoft.AspNet.Cors par la version que vous vouliez au départ.

Cette méthode extrait simplement la version souhaitée du fichier .dll dans le dossier des packages de votre solution. Ensuite, vous utilisez gacutil.exe pour ajouter cette version du fichier .dll à votre Global Assembly Cache. Visual Studio recherche d'abord les versions .dll souhaitées dans le GAC, puis dans votre projet local.

26
Caleb Faruki

exécutez cette commande dans PM (gestionnaire de paquets)

Package d'installation Microsoft.AspNet.Cors -Version 5.2.3.0

2
virender