应用程式无法在docker中运作,无法载入档案或程序集'System.Runtime.CompilerServices.Unsafe

时间:2019-08-27 10:37:08

标签: postgresql docker asp.net-core

我一直在开发一个应用程序,并且一直在正常工作。当我尝试将其部署到Ubuntu主机上的Docker容器中时。

图像构建部分进展顺利。但是在docker上运行该应用程序时,它崩溃并发生以下异常。


    Application startup exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

    File name: 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
       at Npgsql.NpgsqlWriteBuffer.Write[T](T value)
       at Npgsql.FrontendMessages.StartupMessage.WriteFully(NpgsqlWriteBuffer buf)
       at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
       at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at Npgsql.NpgsqlConnection.Open()
       at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
       at Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.EnsureDeleted()
       at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureDeleted()
       at Infrastructure.DatabaseInitializer.Initialize(WayUpToContext dbContext) in /app/src/Infrastructure/WayUpToContext.cs:line 81
       at WayUpTo.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, WayUpToContext dbContext, ApplicationDbContext identityDbContext, UserManager`1 userManager, RoleManager`1 roleManager, IUserService userService, IEventsService eventService, ITrackService trackService, ILectureService lectureService) in /app/src/WayUpTo/Startup.cs:line 200
    --- End of stack trace from previous location where exception was thrown ---
       at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
       at Microsoft.AspNetCore.Mvc.Internal.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
       at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
       at Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder builder)
       at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()


    crit: Microsoft.AspNetCore.Hosting.Internal.WebHost[6]
          Application startup exception
    System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

    File name: 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
       at Npgsql.NpgsqlWriteBuffer.Write[T](T value)
       at Npgsql.FrontendMessages.StartupMessage.WriteFully(NpgsqlWriteBuffer buf)
       at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
       at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at Npgsql.NpgsqlConnection.Open()
       at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
       at Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.EnsureDeleted()
       at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureDeleted()
       at Infrastructure.DatabaseInitializer.Initialize(WayUpToContext dbContext) in /app/src/Infrastructure/WayUpToContext.cs:line 81
       at WayUpTo.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, WayUpToContext dbContext, ApplicationDbContext identityDbContext, UserManager`1 userManager, RoleManager`1 roleManager, IUserService userService, IEventsService eventService, ITrackService trackService, ILectureService lectureService) in /app/src/WayUpTo/Startup.cs:line 200
    --- End of stack trace from previous location where exception was thrown ---
       at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
       at Microsoft.AspNetCore.Mvc.Internal.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
       at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
       at Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder builder)
       at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()



    Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

       at Npgsql.NpgsqlWriteBuffer.Write[T](T value)
       at Npgsql.FrontendMessages.StartupMessage.WriteFully(NpgsqlWriteBuffer buf)
       at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
       at Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at Npgsql.NpgsqlConnection.Open()
       at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
       at Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.EnsureDeleted()
       at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureDeleted()
       at Infrastructure.DatabaseInitializer.Initialize(WayUpToContext dbContext) in /app/src/Infrastructure/WayUpToContext.cs:line 81
       at WayUpTo.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, WayUpToContext dbContext, ApplicationDbContext identityDbContext, UserManager`1 userManager, RoleManager`1 roleManager, IUserService userService, IEventsService eventService, ITrackService trackService, ILectureService lectureService) in /app/src/WayUpTo/Startup.cs:line 200
    --- End of stack trace from previous location where exception was thrown ---
       at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
       at Microsoft.AspNetCore.Mvc.Internal.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
       at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
       at Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder builder)
       at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
       at Microsoft.AspNetCore.Hosting.Internal.WebHost.StartAsync(CancellationToken cancellationToken)
       at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String shutdownMessage)
       at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token)
       at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
       at WayUpTo.Program.Main(String[] args) in /app/src/WayUpTo/Program.cs:line 18

我不知道这里可能出什么问题,我知道该项目可以在其他机器上运行。我觉得这些知识可能有用:  -postgres服务器与另一个Docker容器是同一Ubuntu主机。  -这是Dockerfile


    FROM microsoft/dotnet:2.2-sdk AS build
    WORKDIR /app

    COPY src/WayUpTo.sln ./src/WayUpTo.sln
    COPY src/WayUpTo/WayUpTo.csproj ./src/WayUpTo/WayUpTo.csproj
    COPY . ./
    RUN cd src; dotnet restore


    ARG build=Debug
    RUN cd src; dotnet publish --output /app/out --configuration ${build};

    # build runtime image
    FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
    WORKDIR /app
    COPY --from=build /app/out ./
    ENTRYPOINT ["dotnet", "WayUpTo.dll"]

  • 这是.csproj文件

应用程序核心


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

      <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
      </PropertyGroup>

      <ItemGroup>
        <PackageReference Include="FluentValidation.AspNetCore" Version="8.4.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
        <PackageReference Include="NLog" Version="4.6.6" />
      </ItemGroup>

      <ItemGroup>
        <Folder Include="Domain\" />
      </ItemGroup>

    </Project>

基础设施


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

      <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
      </PropertyGroup>

      <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.2.4" />
        <PackageReference Include="ReflectionIT.Mvc.Paging" Version="3.5.0" />
      </ItemGroup>

      <ItemGroup>
        <ProjectReference Include="..\ApplicationCore\ApplicationCore.csproj" />
      </ItemGroup>

      <ItemGroup>
        <Folder Include="images\" />
      </ItemGroup>

    </Project>

WayUpTo


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

      <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
      </PropertyGroup>

      <ItemGroup>
        <PackageReference Include="bootstrap" Version="4.3.1" />
        <PackageReference Include="FluentValidation.AspNetCore" Version="8.4.0" />
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
        <PackageReference Include="NLog" Version="4.6.6" />
        <PackageReference Include="NLog.Web.AspNetCore" Version="4.8.4" />
        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.2.4" />
        <PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />
      </ItemGroup>

      <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" />
        <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
      </ItemGroup>


      <ItemGroup>
        <ProjectReference Include="..\ApplicationCore\ApplicationCore.csproj" />
        <ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />
      </ItemGroup>
    </Project>

  • 这就是项目开始在我的开发机器上的样子

    info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
          User profile is available. Using 'C:\Users\MerceneX\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
    info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
          Entity Framework Core 2.2.6-servicing-10079 initialized 'WayUpToContext' using provider 'Npgsql.EntityFrameworkCore.PostgreSQL' with options: None
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (33ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          REVOKE CONNECT ON DATABASE "WayUpTo" FROM PUBLIC;
          SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname = 'WayUpTo';
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (136ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          DROP DATABASE "WayUpTo";
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (294ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE DATABASE "WayUpTo";
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (32ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
          CREATE TABLE "Users" (
              "Id" text NOT NULL,
              "Name" text NULL,

  • 这就是它在Docker上的样子

    info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
          User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
    info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[58]
          Creating key {c22d14a8-e304-4085-accd-fb38dcce5270} with creation date 2019-08-27 10:33:28Z, activation date 2019-08-27 10:33:28Z, and expiration date 2019-11-25 10:33:28Z.
    warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
          No XML encryptor configured. Key {c22d14a8-e304-4085-accd-fb38dcce5270} may be persisted to storage in unencrypted form.
    info: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[39]
          Writing data to file '/root/.aspnet/DataProtection-Keys/key-c22d14a8-e304-4085-accd-fb38dcce5270.xml'.
    info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
          Entity Framework Core 2.2.6-servicing-10079 initialized 'WayUpToContext' using provider 'Npgsql.EntityFrameworkCore.PostgreSQL' with options: None
    Application startup exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

谢谢任何试图帮助我解决这个问题的人,我真的不知道会出什么问题。

1 个答案:

答案 0 :(得分:0)

以某种方式导致NuGet软件包管理器出现故障或其他原因。将该版本降级到2.2.0版后。