我正在尝试构建.NET Core应用程序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}");
}
}
}
它只对
Newtonsoft.Json
有一个NuGet依赖项。当我从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'
这是可以预期的,因为Visual Studio不会将
Newtonsoft.Json.dll
复制到输出文件夹。这是我正在使用的
Dockerfile
:FROM microsoft/dotnet:1.0.0-core
COPY bin/Debug /app
有解决此问题的推荐方法吗?
我不想在容器内运行
dotnet restore
(因为我不想每次容器运行时都重新下载所有依赖项)。我想我可以在
RUN dotnet restore
中添加一个Dockerfile
条目,但是之后我就不能再使用microsoft/dotnet:<version>-core
作为基本图像了。而且我找不到一种方法使Visual Studio将所有依赖项复制到输出文件夹中(就像常规.NET Framework项目一样)。
最佳答案
经过一番阅读后,我终于明白了。
而不是dotnet build
您运行:
dotnet publish
这会将所有文件(包括依赖项)放在
publish
文件夹中。然后,该文件夹可以直接与microsoft/dotnet:<version>-core
图像一起使用。关于c# - 如何在.NET Core应用程序docker镜像中包含依赖项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38796439/