我正在尝试构建一个.NET Core app docker镜像.但我无法弄清楚我应该如何将项目的NuGet依赖项放入图像中.
为简单起见,我创建了一个.NET Core控制台应用程序:
using System; using Newtonsoft.Json; namespace ConsoleCoreTestApp { public class Program { public static void Main(string[] args) { Console.WriteLine($"Hello World: {JsonConvert.False}"); } } }
它只有一个NuGet依赖Newtonsoft.Json
.当我从Visual Studio运行应用程序时,一切正常.
但是,当我从项目创建Docker镜像并尝试从那里执行应用程序时,它无法找到依赖项:
# dotnet ConsoleCoreTestApp.dll Error: assembly specified in the dependencies manifest was not found -- package: 'Newtonsoft.Json', version: '9.0.1', path: 'lib/netstandard1.0/Newtonsoft.Json.dll'
这是预期的,因为Newtonsoft.Json.dll
Visual Studio没有将其复制到输出文件夹.
这是Dockerfile
我正在使用的:
FROM microsoft/dotnet:1.0.0-core COPY bin/Debug /app
是否有推荐的方法来处理这个问题?
我不想dotnet restore
在容器内部运行(因为我不希望每次容器运行时都重新下载所有依赖项).
我想我可以添加一个RUN dotnet restore
条目Dockerfile
但是我不能再microsoft/dotnet:
用作基本图像了.
我找不到让Visual Studio将所有依赖项复制到输出文件夹的方法(就像使用常规.NET Framework项目一样).
经过一番阅读后,我终于明白了.
而不是dotnet build
你运行:
dotnet publish
这会将所有文件(包括依赖项)放在一个publish
文件夹中.然后,此文件夹可以直接与microsoft/dotnet:
图像一起使用.