我正在尝试将.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”或其依赖项之一。该系统找不到指定的文件。
答案 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。 -希望有帮助