我正在尝试构建.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/

10-12 03:54
查看更多