1. Error when starting app
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" /> ...
When I display System.Net.Http properties in solution it has:
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
3. Fusionlog
When starting this app, there are two logs, for v4.0.0.0 and v.4.1.1.1. Is this an issue?
For 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.
For 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 ...
Is System.Net.Http.dll in C:\Windows\Microsoft.NET\assembly... ?
5. This is assembly first location
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)
Assembly check:
$ 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. This is assembly second location
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)
Assembly check:
$ 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
I think I have all information, but I can't figure out the solution. I might replace .NETFramework assembly with that from GAC or the way around, but it is blind shot - I don't know what is the reason.
// UPDATE
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>
In summary if you get the "Could not load file or assembly error", this means that either your projects or their references were built with a reference to a specific version of an assembly which is missing from your bin directory or GAC.
Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. Commonly Used Types: System.
Thanks to @Jehof:
Reason
Web.config
had redirect of System.Net.Http
from 4.0.0
to 4.1.1
, and GAC
had only assembly version 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
Removing this redirect solved the problem.
Root cause
I think, I had this assembly redirect in Web.config
, because I installed System.Net.Http
via nuget at some point, and then uninstalled it. However assembly redirect was not removed automatically.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With