繁体   English   中英

无法加载文件或程序集'System.Net.Http'

[英]Could not load file or assembly 'System.Net.Http'

1.启动应用程序时出错

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" />
...

当我在解决方案中显示System.Net.Http属性时,它具有:

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

启动此应用程序时,有两个日志,适用于v4.0.0.0和v.4.1.1.1。 这是一个问题吗?

对于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.

对于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
...

C:\\ Windows \\ Microsoft.NET \\ assembly中的 System.Net.Http.dll ...?

  • GAC_32 - 没有
  • GAC_64 - 没有
  • GAC_MSIL - 是的

这是装配的第一个位置

C:\\ WINDOWS \\ Microsoft.NET \\装配\\ 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)

装配检查:

$ 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.这是装配的第二个位置

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)

装配检查:

$ 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

我想我掌握了所有信息,但我无法弄清楚解决方案。 我可能用GAC或周围的方式替换.NETFramework程序集,但它是盲目的 - 我不知道是什么原因。

//更新

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>

感谢@Jehof:

原因

Web.configSystem.Net.Http重定向从4.0.0重定向到4.1.1 ,而GAC只有程序集版本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>

删除此重定向解决了该问题。

根本原因

我想,我在Web.config有这个程序集重定向,因为我在某个时候通过nuget安装了System.Net.Http ,然后将其卸载。 但是,未自动删除程序集重定向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM