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
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?
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:
Microsoft.AspNet.Cors
par celle que Microsoft.Owin.Cors
demande dans sa définition de manifeste.Microsoft.AspNet.Cors
récemment mis à jour où réside le * System.Web.Cors.dll **.gacutil -i System.Web.Cors.dll
.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.
exécutez cette commande dans PM (gestionnaire de paquets)
Package d'installation Microsoft.AspNet.Cors -Version 5.2.3.0