【问题标题】:System.BadImageFormatException for Microsoft.AspNetCore.HostingMicrosoft.AspNetCore.Hosting 的 System.BadImageFormatException
【发布时间】:2017-02-23 12:53:37
【问题描述】:

似乎我设法破坏了我机器的 .NET Core 安装。我无法运行任何基本的 ASP.NET Core 应用程序。而是出现以下错误:

发生 System.BadImageFormatException

HResult=0x80131018

消息=无法加载文件或程序集“Microsoft.AspNetCore.Hosting,版本=1.1.0.0,文化=中性,PublicKeyToken=adb9793829ddae60”。该模块应包含程序集清单。

来源=<Cannot evaluate the exception source>

堆栈跟踪: 在 C:\CoreTest2017\CoreTest2017\Program.cs:line 23 中的 CoreTest2017.Program.Main(String[] args)

无论我运行哪个 .NET Core 版本,都会发生这种情况。我还没有尝试重新安装任何东西(我在这台工作机器上没有本地管理员权限......)所以我想先在这里检查一下是否有人遇到过这个问题,特别是因为它与 ASP.NET Core 有关.

为清楚起见,这是 Web 应用程序的标准模板。 Program.cs 的内容是:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;

namespace CoreTest2017
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseApplicationInsights()
                .Build();

            host.Run();
        }
    }
}

这是.csproj 标记(这是针对一个空的网络项目,失败的方式相同):

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" />
  </ItemGroup>

</Project>

谁能指出我正确的方向?

【问题讨论】:

  • 你能和我们分享一下Program.cs吗?
  • 你有没有单步执行代码并查看异常消息和内部异常?
  • 我从来没有得到任何代码来单步执行。发生的第一件事是应用程序进入中断模式并说“您的应用程序已进入中断状态,但当前没有执行所选调试引擎支持的代码(例如,只有本机运行时代码正在执行)。”跨度>
  • 你是用64位编译的吗?
  • 能否分享一下你的 project.json 或 csproj 文件?

标签: c# .net iis asp.net-core .net-core


【解决方案1】:

该模块应包含程序集清单。

当您混合使用 x86/x64 位时,可能会发生这种情况。但由于有问题的程序集是 Microsoft.AspNetCore.Hosting,我怀疑问题在于您的 NuGet 缓存以某种方式损坏。尝试删除“%USERPROFILE%.nuget\packages\Microsoft.AspNetCore.Hosting”并重新运行恢复。

如果您仍然遇到错误,您可能需要调试主机以确定它正在尝试加载哪个程序集。将环境变量 COREHOST_TRACE 设置为 1 并运行您的应用程序。这将生成有关您的应用程序尝试加载哪些程序集的详细信息。

【讨论】:

  • 感谢 Nate,感谢您的帮助。不幸的是,删除和恢复 NuGet 缓存不起作用(在恢复之前还创建了一个新项目以确保它正在获取新文件)。我确实启用了跟踪信息,并且在此 gist 失败之前上传了该位。
  • 日志文件包含说它应该从“C:\Users\{userName}\.nuget\packages\microsoft.aspnetcore.hosting\1.1.0\lib\netstandard1.5 \Microsoft.AspNetCore.Hosting.dll"...你能仔细检查一下这个文件是否存在吗?如果是这样,还要检查它是否格式不正确。例如,使用fc.exe 将其与nuget.org/api/v2/package/Microsoft.AspNetCore.Hosting/1.1.0 中的文件进行比较。 (将 *.nupkg 重命名为 *.zip 并解压)。
  • 是的,文件存在,FC 发现两者没有区别。
  • 嗯,我只有一个猜测,因为我试图自己回购它但不能......你报告的日志说它使用的是 Microsoft.NETCore.App 1.0.3,但你的 csproj 说 netcoreapp1.1。该错误可能是由混合 .NET Core 1.1 和 1.0 位引起的。确保您拥有最新的 SDK (github.com/dotnet/cli) 并清理您的 bin/ 和 obj/ 目录。
  • 在这种情况下 1.0.3 是正确的,因为我一直在尝试同时运行 netcoreapp1.0 和 1.1 默认项目以查看是否有任何一个可以工作,因此对矛盾表示歉意。我也刚刚尝试下载最新的 SDK (1.0.0-rc4-004883) 二进制文件并使用特定的dotnet.exe 手动执行dotnet run,并在清理/删除 bin/ 和 obj/ 后获得相同的结果。这个太棒了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多