1. Erreur lors du démarrage de l'application
Could not load file or Assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Stack Trace:
[FileNotFoundException: Could not load file or Assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.]
System.Web.Http.GlobalConfiguration..cctor() +0
[TypeInitializationException: The type initializer for 'System.Web.Http.GlobalConfiguration' threw an exception.]
System.Web.Http.GlobalConfiguration.get_Configuration() +14
SerilogWeb.Classic.WebApi.PreApplicationStartModule.Register() +10
[InvalidOperationException: The pre-application start initialization method Register on type SerilogWeb.Classic.WebApi.PreApplicationStartModule threw an exception with the following error message: The type initializer for 'System.Web.Http.GlobalConfiguration' threw an exception..]
System.Web.Compilation.BuildManager.InvokePreStartInitMethodsCore(ICollection`1 methods, Func`1 setHostingEnvironmentCultures) +614
System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +138
System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +164
System.Web.Compilation.BuildManager.ExecutePreAppStart() +156
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +695
[HttpException (0x80004005): The pre-application start initialization method Register on type SerilogWeb.Classic.WebApi.PreApplicationStartModule threw an exception with the following error message: The type initializer for 'System.Web.Http.GlobalConfiguration' threw an exception..]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +658
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +89
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +190
2. Csproj
...
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
...
<Reference Include="System.Net.Http" />
...
Lorsque j'affiche les propriétés System.Net.Http dans la solution, il a:
Aliases = global
CopyLocal = False
Path = C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll
Resolved = True
Runtime Version = v4.0.30319
Specific Version = True
Strong Name = True
Version = 4.0.0.0
. Fusionlog
Au démarrage de cette application, il existe deux journaux, pour v4.0.0.0 et v.4.1.1.1. Est-ce un problème?
Pour v4.0.0.0
*** Assembly Binder Log Entry (x) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Program Files (x86)\IIS Express\iisexpress.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: DisplayName = System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
(Fully-specified)
LOG: Appbase = x
LOG: Initial PrivatePath = x\bin
LOG: Dynamic Base = C:\Users\y\AppData\Local\Temp\Temporary ASP.NET Files\vs\xyz
LOG: Cache Base = C:\Users\y\AppData\Local\Temp\Temporary ASP.NET Files\vs\xyz
LOG: AppName = 12345
Calling Assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: x\web.config
LOG: Using Host configuration file: w\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Users/y/AppData/Local/Temp/Temporary ASP.NET Files/vs/xyz/12345/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/Users/y/AppData/Local/Temp/Temporary ASP.NET Files/vs/xyz/12345/System.Net.Http/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/x/bin/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/x/bin/System.Net.Http/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/Users/y/AppData/Local/Temp/Temporary ASP.NET Files/vs/xyz/12345/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///C:/Users/y/AppData/Local/Temp/Temporary ASP.NET Files/vs/xyz/12345/System.Net.Http/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///C:/x/bin/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///C:/x/bin/System.Net.Http/System.Net.Http.EXE.
LOG: All probing URLs attempted and failed.
Pour v4.1.1.0
*** Assembly Binder Log Entry (x) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Program Files (x86)\IIS Express\iisexpress.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: DisplayName = System.Net.Http, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
(Fully-specified)
LOG: Appbase = file:///C:/x/
LOG: Initial PrivatePath = C:\x\bin
LOG: Dynamic Base = C:\Users\y\AppData\Local\Temp\Temporary ASP.NET Files\vs\xyz
LOG: Cache Base = C:\Users\y\AppData\Local\Temp\Temporary ASP.NET Files\vs\xyz
LOG: AppName = 12345
Calling Assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\x\web.config
LOG: Using Host configuration file: w\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Redirect found in application configuration file: 4.1.1.1 redirected to 4.1.1.1.
LOG: ProcessorArchitecture is locked to MSIL.
LOG: Post-policy reference: System.Net.Http, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Users/y/AppData/Local/Temp/Temporary ASP.NET Files/vs/xyz/12345/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/Users/y/AppData/Local/Temp/Temporary ASP.NET Files/vs/xyz/12345/System.Net.Http/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/x/bin/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/x/bin/System.Net.Http/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/Users/y/AppData/Local/Temp/Temporary ASP.NET Files/vs/xyz/12345/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///C:/Users/y/AppData/Local/Temp/Temporary ASP.NET Files/vs/xyz/12345/System.Net.Http/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///C:/x/bin/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///C:/x/bin/System.Net.Http/System.Net.Http.EXE.
LOG: All probing URLs attempted and failed.
4. GAC
$ gacutil -l
...
System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
...
System.Net.Http.dll dans C:\Windows\Microsoft.NET\Assembly ...?
5. Il s'agit du premier emplacement de l'assemblage
C:\Windows\Microsoft.NET\Assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll
System.Net.Http.dll 197 kB (file version: 4.7.2046.0)
Vérification de l'assemblage:
$ sn.exe -T "C:\Windows\Microsoft.NET\Assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll"
Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.0
Copyright (c) Microsoft Corporation. All rights reserved.
Public key token is b03f5f7f11d50a3a
6. Il s'agit du deuxième emplacement de l'assemblage
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.6.1\System.Net.Http.dll
System.Net.Http.dll 84 kB (file version: 4.6.1055.0)
Vérification de l'assemblage:
$ sn.exe -T "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll"
Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.0
Copyright (c) Microsoft Corporation. All rights reserved.
Public key token is b03f5f7f11d50a3a
Je pense avoir toutes les informations, mais je ne peux pas trouver la solution. Je pourrais remplacer .NETFramework Assembly par celui de GAC ou l'inverse, mais c'est un tir aveugle - je ne sais pas quelle est la raison.
// MISE À JOUR
Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
...
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.1.1.1" />
</dependentAssembly>
...
</assemblyBinding>
</runtime>
</configuration>
Merci à @Jehof:
Raison
Web.config
avait une redirection de System.Net.Http
de 4.0.0
à 4.1.1
et GAC
n'avaient que la version Assembly 4.0.0
.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
...
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.1.1.1" />
</dependentAssembly>
...
</assemblyBinding>
</runtime>
</configuration>
Solution
La suppression de cette redirection a résolu le problème.
Cause profonde
Je pense que j'ai redirigé cette Assemblée dans Web.config
, car j'ai installé System.Net.Http
via nuget à un moment donné, puis désinstallé. Cependant, la redirection d'assembly n'a pas été supprimée automatiquement.