Lorsque je vérifie la référence d'assembly 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 vers 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 également 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'assemblage 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 généré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'il attend la v5.0.0.0, mais je ne peux pas voir où ni pourquoi appeler pour 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
  • Rétrogradation de 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 c'est la 4ème occurrence de la même erreur exacte avec un assembly différent à chaque fois, depuis que j'ai commencé un nouveau projet vide avec Web Api coché. Et j'ai installé le package z4a-foundation-scaffold-auth dans mon projet. J'apprécierais certainement une explication de mes lacunes dans les connaissances ici!

EDIT : ILDASM.exe a utilisé pour examiner l'assemblage Microsoft.Owin.Cors. J'ai trouvé qu'il avait spécifié System.Web.Cors v5.0.0.0 dans sa définition de manifeste. Je suppose que ma question est maintenant de savoir comment remédier à cela?

18
Caleb Faruki 26 déc. 2015 à 01:51

2 réponses

Meilleure réponse

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

Install-Package Microsoft.AspNet.Cors -Version 5.0.0

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

Si vous avez un scénario dans lequel vous avez besoin de deux versions différentes de System.Web.Cors.dll , je vous suggère cette solution:

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

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

33
Caleb Faruki 28 déc. 2015 à 07:00

Exécutez cette commande dans PM (gestionnaire de packages)

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

2
virender 22 déc. 2016 à 13:08