started - web api c# tutorial
No se puede cargar el ensamblado System.Web.Cors después de llamar a Microsoft.Owin.Cors (2)
Cuando System.Web.Cors
referencia del ensamblado System.Web.Cors
en el Explorador de soluciones, la Version
es 5.2.3.0 . La propiedad Specific Version
se establece en False
. La ruta es a la carpeta bin del proyecto local. Al verificar las propiedades de .dll desde el Explorador de archivos, la versión del producto y la versión del archivo. También es 5.2.3 .
Mi 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>
Mis paquetes.config (creo que el ensamblaje problemático es Microsoft.AspNet.WebApi.Cors
, pero incluí otro aquí con un nombre similar):
<package id="Microsoft.AspNet.Cors" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net452" />
El error se lanza en esta línea en Startup.cs
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
Aquí está el error completo:
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:
Entonces, puedo ver que está esperando v5.0.0.0, pero no puedo ver dónde o por qué pedir esta versión.
He hecho los siguientes pasos para depurar este error. Después de cada uno de los intentos enumerados, limpié y luego reconstruí el proyecto. El error no ha cambiado después de intentar cada uno de estos pasos.
-
Update-Package
-
Install-Package Microsoft.AspNet.WebApi.Cors
-
Uninstall-Package Microsoft.AspNet.WebApi.Cors
, luegoInstall-Package Microsoft.AspNet.WebApi.Cors
-
Uninstall-Package Microsoft.AspNet.WebApi.Cors
, luegoInstall-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.3
-
v5.0.0.0
Microsoft.AspNet.WebApi.Cors
av5.0.0.0
través de la ventana del Administrador de paquetes.
Todavía no soy un experto en .NET, y esta es la cuarta vez que ocurre el mismo error exacto con un ensamblaje diferente cada vez, ya que comencé un nuevo proyecto vacío con Web Api
comprobado. E instalé el z4a-foundation-scaffold-auth
en mi proyecto. ¡Definitivamente apreciaría alguna explicación de mis lagunas en el conocimiento aquí!
EDITAR : usé ILDASM.exe para ver Microsoft.Owin.Cors
ensamblado de Microsoft.Owin.Cors
. Lo encontró especificado System.Web.Cors v5.0.0.0
en su definición de manifiesto. Supongo que mi pregunta ahora es ¿cómo remediar esto?
Resulta que System.Web.Cors.dll no proviene del paquete Microsoft.AspNet.WebApi.Cors
. Viene del paquete Microsoft.AspNet.Cors
.
Install-Package Microsoft.AspNet.Cors -Version 5.0.0
Esto resolvió el error inmediato.
En caso de que tenga un escenario en el que necesite dos versiones diferentes de System.Web.Cors.dll , sugeriría esta solución:
- Usando el Administrador de paquetes, cambie la versión de
Microsoft.AspNet.Cors
a la versión queMicrosoft.Owin.Cors
solicita en su definición de manifiesto. - Usando el símbolo del sistema del desarrollador para Visual Studio (ejecutado como administrador), navegue a la carpeta del paquete para el
Microsoft.AspNet.Cors
recientemente versionado donde reside el * System.Web.Cors.dll **. - Ejecute el siguiente comando:
gacutil -i System.Web.Cors.dll
. - Vuelva al Administrador de paquetes y cambie
Microsoft.AspNet.Cors
a la versión que originalmente deseaba.
Este método simplemente lleva la versión deseada del archivo .dll a la carpeta de paquetes de su Solución. Luego, usa gacutil.exe
para agregar esta versión de .dll a su caché de ensamblados global. Visual Studio busca las versiones .dll deseadas primero en el GAC, luego en su proyecto local.
ejecuta este comando en PM (gestor de paquetes)
Paquete de instalación Microsoft.AspNet.Cors -Version 5.2.3.0