我有一个运行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上运行,这感觉有点奇怪 但现在它运行没有错误。
答案 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