Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET核心应用程序docker映像中包含依赖项?_C#_Visual Studio_Docker_.net Core - Fatal编程技术网

C# 如何在.NET核心应用程序docker映像中包含依赖项?

C# 如何在.NET核心应用程序docker映像中包含依赖项?,c#,visual-studio,docker,.net-core,C#,Visual Studio,Docker,.net Core,我正在尝试构建一个.NET核心应用程序docker映像。但我不知道该如何将项目的NuGet依赖项放到映像中 为了简单起见,我创建了一个.NET核心控制台应用程序: using System; using Newtonsoft.Json; namespace ConsoleCoreTestApp { public class Program { public static void Main(string[] args) {

我正在尝试构建一个.NET核心应用程序docker映像。但我不知道该如何将项目的NuGet依赖项放到映像中

为了简单起见,我创建了一个.NET核心控制台应用程序:

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依赖项。当我从VisualStudio运行应用程序时,一切正常

但是,当我从项目中创建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
(因为我不想每次容器运行时都重新下载所有依赖项)

我想我可以在
Dockerfile
中添加
RUN dotnet restore
条目,但是我不能再使用
microsoft/dotnet:-core
作为基本映像了

我找不到一种方法让Visual Studio将所有依赖项复制到输出文件夹中(就像常规的.NET Framework项目一样)。

我最近写了一篇关于此的文章。我使用的Dockerfile内容是(稍微修改以删除ASP.NET核心位):


运行
docker build
时,它将Dockerfile用作构建映像的“配方”。它将首先运行
dotnet restore
dotnet build
,然后将所有内容打包到映像中。生成的图像包含了应用程序在任何Docker主机上运行所需的所有内容。

经过进一步阅读,我终于找到了答案

您运行的不是
dotnet build

dotnet publish

这将把所有文件(包括依赖项)放在
publish
文件夹中。然后,此文件夹可以直接与
microsoft/dotnet:-core
图像一起使用。

我不是.net用户,请原谅我的无知。。。为什么添加
运行dotnet restore
会阻止您使用dotnet基本映像?@Matt是正确的,它不应该阻止您使用
microsoft/dotnet
基本映像。@Matt因为核心映像不包含restore命令。@SebastianKrysmanski。。所以像是jre而不是jdk。缺少一些开发代码。@Matt是的,是这样的。核心映像只是运行时。不幸的是,这不适用于
dotnet:xxx核心映像。不过,我不确定
dotnet
dotnet:xxx core
作为基本映像之间的区别是否相关。@SebastianKrysmanski只是好奇,为什么要使用
dotnet:xxx core
而不是
dotnet:latest
?没有特殊原因。对我来说,这似乎是最符合逻辑/最简单的解决方案。另外,我尽量不把源代码放在容器中。
dotnet publish