生成缺少Newtonsoft.Json的Docker映像时.net核心生成错误

时间:2018-11-27 22:22:55

标签: docker .net-core dockerfile

我正在尝试将.net核心项目构建到docker容器上,但似乎找不到Newtonsoft.Json,我认为它已包含在asp.net核心中

这是我的docker文件:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 58373
EXPOSE 44370

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["TestCode/TestCode.csproj", "TestCode/"]
RUN dotnet restore "TestCode/TestCode.csproj"
COPY . .
WORKDIR "/src/TestCode"
RUN dotnet build "TestCode.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "TestCode.csproj" -c Release -o /app

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

尝试构建时出现以下错误 错误无法加载文件或程序集“ Newtonsoft.Json,版本= 9.0.0.0,区域性=中性,PublicKeyToken = 30ad4fe6b2a6ed”或其依赖项之一。该系统找不到指定的文件。

3 个答案:

答案 0 :(得分:1)

发现了问题。将NuGet软件包Microsoft.VisualStudio.Azure.Containers.Tools.Targets更新到最新版本,问题就消失了。

答案 1 :(得分:0)

就我而言,在课堂上使用JsonProperty

自动填充Visual Studio智能代码

using Newtonsoft.Json;

然后在docker build期间

  

警告MSB3245:无法解决此引用。无法找到程序集“ Newtonsoft.Json”。检查以确保程序集在磁盘上。

当我检查时,发现Visual Studio向Newtonsoft.Json添加了程序集引用(您可以通过在解决方案资源管理器中展开 Dependencies 节点来找到它)在Visual Studio中)。而且我正在使用Linux映像。

因此,为了解决此问题,我删除了 Assembly Reference ,并添加了nuget包Newtonsoft.Json,然后docker build成功了。

答案 2 :(得分:0)

一种方法是让您的其他项目成为解决方案的一部分,并将其作为项目参考进行引用。 要么 第二种方法是作为快速解决方案,对我有用并且对我有用的是在COPY之后。 。是在docker文件中添加另一个复制命令,例如: 复制./bin/Debug/.../your-referenced-dll-name.dll。 -希望有帮助