2015-12-25 36 views
15

Po sprawdzeniu odwołania do zestawu System.Web.Cors w eksploratorze rozwiązań, Version to 5.2.3.0. Właściwość Specific Version jest ustawiona na False. Ścieżka do folderu lokalnego folderu projektu. Podczas sprawdzania właściwości .dll w Eksploratorze plików, wersja pliku i wersja pliku. jest również 5.2.3.Nie można załadować zestawu System.Web.Cors po wywołaniu Microsoft.Owin.Cors

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

Moja packages.config (myślę, że kłopotliwy montaż jest Microsoft.AspNet.WebApi.Cors, ale zawiera inny tutaj z podobnej nazwie):

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

Wystąpił błąd w tej linii w Startup.cs

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

Oto pełna błąd:

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: 

Tak, widzę, że spodziewa v5.0.0.0, ale nie mogę zobaczyć, gdzie, gdzie i dlaczego dzwoni do tej wersji.

Wykonałem następujące kroki, aby usunąć błąd. Po każdej z wymienionych prób wyczyściłem, a następnie przebudowałem projekt. Błąd nie zmienił się po wykonaniu każdego z tych kroków.

  • Update-Package
  • Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors, następnie Install-Package Microsoft.AspNet.WebApi.Cors
  • Uninstall-Package Microsoft.AspNet.WebApi.Cors, następnie Install-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.3
  • Obniżona Microsoft.AspNet.WebApi.Cors do v5.0.0.0 przez okno Package Manager.

Nie jestem ekspertem w .NET jeszcze, a to jest 4 wystąpienie tego samego błędu z dokładnym innego zespołu za każdym razem, odkąd zacząłem świeżego pusty projekt z Web Api sprawdzane. I zainstalowałem pakiet z4a-foundation-scaffold-auth w moim projekcie. Zdecydowanie doceniam wyjaśnienie moich braków w wiedzy tutaj!

EDIT: Użyto ILDASM.exe do obejrzenia zespołu Microsoft.Owin.Cors. Znaleziono definicję System.Web.Cors v5.0.0.0 w jej definicji manifestu. Domyślam się, że moje pytanie brzmi teraz, jak temu zaradzić?

+0

Sprawdź inne zależne pliki DLL z ILDASM.exe. musi istnieć przynajmniej jeden plik DLL, który wymaga System.Web.Cors v5.0.0.0 – yyou

+0

OK, więc manifest 'Microsoft.Owin.Cors' wymaga' System.Web.Cors v5.0.0.0'. Jak mogę rozwiązać ten problem? –

+1

Czy dodałeś przekierowanie powiązania zestawu do pliku web.config dla System.Web.Cors? Zasadniczo, po prostu przekieruj wszystkie wersje do najnowszej wersji zainstalowanej w głównej aplikacji. https://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx – HackedByChinese

Odpowiedz

23

Okazało się, że System.Web.Cors.dll nie pochodzi z pakietu Microsoft.AspNet.WebApi.Cors. Pochodzi z pakietu Microsoft.AspNet.Cors.

Install-Package Microsoft.AspNet.Cors -Version 5.0.0 

Rozwiązało to natychmiastowy błąd.

W przypadku gdy masz scenariusz, w którym potrzebne są dwie różne wersje System.Web.Cors.dll, polecam tego rozwiązania:

  1. Korzystanie z menedżera pakietów, zmień wersję z wersji Microsoft.AspNet.Cors do wersji, której żądają w swojej definicji manifestu.
  2. Korzystanie z podpowiedzi dla programistów w Visual Studio (uruchamianie jako admin), przejdź do folderu pakietu dla nowo zaktualizowanego Microsoft.AspNet.Cors, gdzie znajduje się * System.Web.Cors.dll **.
  3. Uruchom następującą komendę: gacutil -i System.Web.Cors.dll.
  4. Powróć do Menedżera pakietów i zmień z powrotem wersję Microsoft.AspNet.Cors na wersję, która była oryginalna.

Ta metoda po prostu ściąga pożądaną wersję pliku .dll do folderu pakietów rozwiązania. Następnie należy użyć gacutil.exe, aby dodać tę wersję pliku .dll do pamięci podręcznej Global Assembly. Visual Studio sonduje żądane wersje .dll najpierw w GAC, a następnie w lokalnym projekcie.

+6

Miałem ten sam problem, z wyjątkiem tego, że pakiet został już zainstalowany. Naprawiłem to za pomocą 'Update-Package -reinstall Microsoft.AspNet.Cors' po przejrzeniu twojej odpowiedzi. –

+1

@Mike, dzięki rozwiązaniu naprawiłem mój problem –

2

uruchomieniu tego polecenia w PM (menadżer pakietów)

Microsoft.AspNet.Cors Install-Package -version 5.2.3.0