AspNetCore项目仅在linux容器上提供System.IO.FileNotFoundException

时间:2018-02-15 16:43:30

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

我有一个运行AspNetCore网络服务器的dotnet核心项目。我使用了几个其他的DLL,它们都是相当简单的类库。

我可以将存储库从git下载到我的Windows PC上,然后运行:

dotnet restore
dotnet run 

一切正常。

但是,如果我在基于microsoft / aspnetcore-build:1.0.7的docker容器中做同样的事情,我会在HTTP PUT上收到以下错误:

fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLBKHRVH7OND": An unhandled exception was thrown by the application.
System.IO.FileNotFoundException: Could not load file or assembly 'KolData, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.

现在文件Koldata.dll确实存在于git存储库中,它位于bin / Debug / netcoreapp1.1文件夹中。

我可以通过删除构建目录中的KolData.dll文件在Windows中重新创建错误。所以似乎Linux上的dotnet核心看不到那个文件,我不确定为什么。

我甚至尝试用来自源代码的机器上构建的版本替换DLL,但它仍然会带来同样的错误。

一个解决方案

我设法通过更改csproj文件的目标框架来实现它的工作:

<PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <PackageTargetFallback>portable-net45+win8</PackageTargetFallback>
</PropertyGroup> 

为:

 <PropertyGroup>
    <TargetFramework>netcoreapp1.0</TargetFramework>
    <PackageTargetFallback>portable-net45+win8</PackageTargetFallback>
  </PropertyGroup> 

由于KolData.dll在1.1上运行,这感觉有点奇怪 但现在它运行没有错误。

1 个答案:

答案 0 :(得分:1)

您必须创建Dockerfile并构建docker镜像。

编辑: Dockerfile应该是什么样子的一个例子。以下文件构建Visual Studio项目并创建docker镜像。

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY *.sln ./
COPY WebApplication/WebApplication.csproj WebApplication/
RUN dotnet restore
COPY . .
WORKDIR /src/WebApplication
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApplication.dll"]

如果您已经构建了应用程序,请在包含Dockerfile的容器中包含.dll:

FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "application.dll"]

构建并运行您的应用:

docker build -t application
docker run -d -p 8000:80 application

Building Docker Images for .NET Core Applications