【问题标题】:The type initializer for 'Microsoft.AspNetCore.Mvc.MvcCoreLoggerExtensions' threw an exception.''Microsoft.AspNetCore.Mvc.MvcCoreLoggerExtensions' 的类型初始化程序引发了异常。
【发布时间】:2021-08-19 12:47:34
【问题描述】:

我正在制作一个 .NET Core 应用程序,我想启动一个应用程序,但它在这行代码中显示:

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapRazorPages();
            });
//...

它说这个错误:

System.TypeInitializationException: 'Microsoft.AspNetCore.Mvc.MvcCoreLoggerExtensions' 的类型初始化程序引发了异常。'

这是新事物,我在启动应用程序时从未见过。我该如何解决?

内部异常是:

找不到方法:'System.Action`4 Microsoft.Extensions.Logging.LoggerMessage.Define(Microsoft.Extensions.Logging. LogLevel, Microsoft.Extensions.Logging.EventId, System.String, Boolean)'。

Main.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

.NET Core 6.0 为最新版本

身份包含在应用程序中。

【问题讨论】:

  • 能否请您从Main 发布代码以及有关应用程序类型和版本的一些详细信息
  • aamd,我已经编辑了 main.cs 中的代码和上面主要帖子中的详细信息。
  • 我怀疑 Microsoft.Extensions.Logging 包有问题或丢失。你能提供这个例子使用的 csproj 吗?

标签: c# .net .net-core


【解决方案1】:

您需要更新Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

遇到同样的问题,在 VS2022 中使用 razor 模板项目创建的 MVC Proj 使用的是6.0.0-preview.5.21301.17,所以我将包更新为6.0.0-preview.7.21378.6

【讨论】:

    【解决方案2】:

    好吧,当我尝试添加包 Microsoft.Extensions.Logging 时,它说 .NET Core 6.0 是不受支持的版本。

    我从 VS 2022 Preview 和 .NET CORE 6 Preview 转移到 VS 2019 和 .NET Core 5,现在一切正常。

    所以这是新预览版本之间的冲突(或者可能是一个新的 Microsoft 错误?):D。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,但没有从 .NET CORE 6 Preview 切换的选项。

      这是我的 csproj:

      <Project Sdk="Microsoft.NET.Sdk.Web">
      
        <PropertyGroup>
          <Description>Application description goes here</Description>
          <!-- NuGet Version Number (no pre-release identifiers)-->
          <VersionPrefix>1.0.0</VersionPrefix>
          <Authors>Your name here</Authors>
          <TargetFramework>net6.0</TargetFramework>
          <PackageProjectUrl>--redacted--</PackageProjectUrl>
          <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
          <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
          <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
          <!-- Should be major.minor.0.0-->
          <AssemblyVersion>1.0.0.0</AssemblyVersion>
          <!-- Should be major.minor.version.0-->
          <FileVersion>1.0.0.0</FileVersion>
          <TypeScriptToolsVersion>3.3</TypeScriptToolsVersion>
        </PropertyGroup>
      
        <ItemGroup>
          <PackageReference Include="AutoMapper" Version="10.1.1" />
          <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
          <PackageReference Include="BuildBundlerMinifier" Version="3.2.449" />
          <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.0-preview.7.21378.6" />
          <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.0-preview.7.21378.4" />
          <PackageReference Include="Microsoft.jQuery.Unobtrusive.Ajax" Version="3.2.6" />
          <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.2.0" />
          <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.0-preview.7.21413.1" />
          <PackageReference Include="Microsoft.Web.LibraryManager.Build" Version="2.1.113" />
        </ItemGroup>
      
        <ItemGroup>
          <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
        </ItemGroup>
      
        <ItemGroup>
          <Content Update="appsettings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
          </Content>
        </ItemGroup>
      
        <ItemGroup>
          <Folder Include="wwwroot\lib\" />
        </ItemGroup>
      
        <ItemGroup>
          <ProjectReference Include="..\MyProject.Data\\MyProject.Data.csproj" />
          <ProjectReference Include="..\\MyProject.Services\\MyProject.Services.csproj" />
        </ItemGroup>
      </Project>
      

      【讨论】:

      • 您找到解决方案了吗?
      • @trailmax - 不,但我还没有尝试过 Chenna 的解决方案。
      • 我试过了,没有任何区别。我已降级为 .Net 5 作为临时测量值。
      【解决方案4】:

      我遇到了同样的问题。为了实验,我创建了一个新项目,并在其中添加了最新版本的 Microsoft.Extensions.Logging(当前为 6.0.0-preview.7.21377.19)。该项目崩溃并出现与您相同的错误。问题是 LoggerMessage.Define 中没有四参数重载。将包降级到版本 6.0.0-preview.6.21352.12 对我有帮助。

      【讨论】:

        【解决方案5】:

        当我尝试将 Blazor WASM Asp.net 托管项目从 5.0 升级到 6.0.0 时,出现完全相同的错误。我正在使用 Serilog,但不确定这是否是一个因素。

        【讨论】:

        • 好的,问题是我的 global.json 文件中的 SDK 版本不正确。
        【解决方案6】:

        我对 .net 6 和 Microsoft.AspCore libs ALL 在 5.0.12 没有任何问题。如果我更新到 6.0.0 我有这个问题。我继续开发,并且在尝试集成 Auth0 时遇到了同样的问题。我解决此异常的唯一解决方案是将整个应用程序降级到 .net 5.0。库在 5.0.12 时保持不变。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-28
          • 1970-01-01
          • 2016-03-27
          • 1970-01-01
          相关资源
          最近更新 更多