it-swarm.com.de

System.Web.Cors Assembly kann nach dem Aufruf von Microsoft.Owin.Cors nicht geladen werden

Wenn ich die System.Web.Cors Assembly-Referenz im Projektmappen-Explorer überprüfe, lautet die Version 5.2.3.0 . Die Specific Version-Eigenschaft ist auf False festgelegt. Der Pfad ist zum lokalen Ordner "Projektordner". Beim Überprüfen der DLL-Eigenschaften im Datei-Explorer werden Produktversion und Dateiversion der Datei angezeigt. ist auch 5.2.3 .

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

Meine packages.config (Ich denke, die lästige Assembly ist Microsoft.AspNet.WebApi.Cors, aber ich habe hier eine andere mit einem ähnlichen Namen hinzugefügt):

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

Fehler wird in dieser Zeile in Startup.cs ausgegeben

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

Hier ist der volle Fehler:

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: 

Ich kann also sehen, dass es v5.0.0.0 erwartet, aber ich kann nicht sehen, wo und warum diese Version aufgerufen wird.

Ich habe die folgenden Schritte ausgeführt, um diesen Fehler zu debuggen. Nach jedem der aufgelisteten Versuche habe ich das Projekt gereinigt und dann neu erstellt. Der Fehler hat sich nicht geändert, nachdem Sie jeden dieser Schritte ausgeführt haben.

  • Update-Package
  • Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors, dann Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors, dann Install-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.3
  • Microsoft.AspNet.WebApi.Cors zu v5.0.0.0 über das Package Manager-Fenster heruntergestuft.

Ich bin noch kein Experte für .NET, und dies ist das vierte Vorkommen des gleichen exakten Fehlers mit einer anderen Assembly, jedes Mal, da ich ein neues leeres Projekt mit Web Api geprüft habe. Und ich habe das z4a-foundation-scaffold-auth-Paket in mein Projekt installiert. Ich würde mich definitiv über eine Erklärung meiner Wissenslücken freuen!

EDIT: Verwendet ILDASM.exe, um Microsoft.Owin.Cors Assembly anzuzeigen. In der Manifestdefinition wurde System.Web.Cors v5.0.0.0 angegeben. Ich denke, meine Frage ist jetzt, wie ich Abhilfe schaffen kann.

18
Caleb Faruki

Stellt sich heraus, dass System.Web.Cors.dll nicht aus dem Microsoft.AspNet.WebApi.Cors-Paket stammt. Es stammt aus dem Microsoft.AspNet.Cors-Paket.

Install-Package Microsoft.AspNet.Cors -Version 5.0.0

Dies hat den sofortigen Fehler behoben.

Falls Sie ein Szenario haben, in dem Sie zwei verschiedene Versionen von System.Web.Cors.dll benötigen, würde ich diese Lösung vorschlagen:

  1. Ändern Sie mithilfe von Package Manager die Version von Microsoft.AspNet.Cors in die Version, die Microsoft.Owin.Cors in der Manifestdefinition angefordert wird.
  2. Navigieren Sie mithilfe der Developer-Eingabeaufforderung für Visual Studio (als Admin ausführen) zum Paketordner für den neu versionierten Microsoft.AspNet.Cors, in dem sich die * System.Web.Cors.dll ** befindet.
  3. Führen Sie den folgenden Befehl aus: gacutil -i System.Web.Cors.dll.
  4. Gehen Sie zurück zum Package Manager und ändern Sie Microsoft.AspNet.Cors wieder in die Version, die Sie ursprünglich gewünscht haben.

Diese Methode zieht einfach die gewünschte Version der DLL-Datei in den Paketordner Ihrer Lösung. Dann verwenden Sie gacutil.exe, um diese Version der DLL Ihrem globalen Assemblycache hinzuzufügen. Visual Studio sucht nach der gewünschten DLL-Version zuerst im GAC, dann in Ihrem lokalen Projekt.

26
Caleb Faruki

führen Sie diesen Befehl in PM (Paketmanager) aus.

Installationspaket Microsoft.AspNet.Cors -Version 5.2.3.0

2
virender