簡體   English   中英

在 Ubuntu 上運行獨立的 ASP.NET Core 應用程序

[英]Running a self-contained ASP.NET Core application on Ubuntu

我發布了一個 ASP.NET Core 應用程序作為面向 Ubuntu 的自包含應用程序。 發布似乎工作正常。 我已經將這些文件復制到了一台非常普通的 Ubuntu 機器上。 現在,我如何運行我的應用程序?

我的理解是,因為它是一個自包含.NET核心應用我並不需要下載並安裝.NET的核心東西。 我的應用程序應該包含它需要的一切。

所有教程似乎都說我應該調用dotnet run 但是,“dotnet”命令行不存在(它應該發布到自包含文件夾中嗎??)所以如果我調用它,我會得到“找不到命令”。 我當然可以下載 .NET Core,但這不違背整個獨立的概念嗎?

這是我正在復制的文件示例:

在此處輸入圖片說明

回答

現在,我如何運行我的應用程序? 我的理解是,因為它是一個自包含.NET核心應用我並不需要下載並安裝.NET的核心東西。 我的應用程序應該包含它需要的一切。

你是對的。 運行可執行文件。

創建自包含應用程序時,發布輸出“包含啟動應用程序所需的完整文件集(應用程序文件和所有 .NET Core 文件)。” 這包括可執行文件。

獨立部署示例

這是一個簡單的自包含應用程序的dotnet publish -c release -r ubuntu.14.04-x64的輸出。 將發布目錄復制到 Ubuntu 並運行可執行文件。

C:\\MyApp\\bin\\release\\netcoreapp1.0\\ubuntu.14.04-x64\\publish\\

...

libsos.so
libsosplugin.so
libuv.so
Microsoft.CodeAnalysis.CSharp.dll
Microsoft.CodeAnalysis.dll
Microsoft.CodeAnalysis.VisualBasic.dll
Microsoft.CSharp.dll
Microsoft.VisualBasic.dll
Microsoft.Win32.Primitives.dll
Microsoft.Win32.Registry.dll
mscorlib.dll
mscorlib.ni.dll
MyApp                        <------- On Ubuntu, run this executable
MyApp.deps.json                       and you will see Hello World!
MyApp.dll
MyApp.pdb
MyApp.runtimeconfig.json
sosdocsunix.txt
System.AppContext.dll
System.Buffers.dll
System.Collections.Concurrent.dll
System.Collections.dll

...

C:\\MyApp\\project.json

{
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": "1.0.1"
      }
    }
  },
  "runtimes": {
    "ubuntu.14.04-x64" : {},
    "win10-x64" : {}
  }
}

C:\\MyApp\\Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        System.Console.WriteLine("Hello World!");
    }
}

另見

本文檔區分依賴於框架的部署和獨立的部署。

按照以下步驟運行您的應用程序:

  1. 將您的應用程序發布為自包含應用程序:

     dotnet publish -c release -r ubuntu.16.04-x64 --self-contained
  2. publish文件夾復制到 Ubuntu 機器

  3. 打開Ubuntu機器終端(CLI),進入項目目錄

  4. 提供執行權限:

     chmod 777 ./appname
  5. 執行應用程序

    ./appname

添加一名作者

原始答案在這里: 如何在 Linux 上運行 .NET Core 控制台應用程序

值得注意的是,在.NET Standard 2+ 中,有兩個必需的步驟:

  • 編輯 .csproj 文件並添加一行包含目標運行時列表:

<物業組>

 <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> <!-- Add this with the required runtimes --> <RuntimeIdentifiers>win10-x64;osx.10.11-x64;ubuntu.16.10-x64</RuntimeIdentifiers>

</PropertyGroup>

  • 恢復和構建應用程序: dotnet restore && dotnet build -c release -r RUNTIME

其中 RUNTIME 是 .csproj 文件中列出的運行時之一。

重要的是請注意,如果沒有 .csproj 文件編輯和調用dotnet restore ,則無法執行此操作,否則不會從NuGet下載運行時,並且-r ...標志將不起作用。

您可能還想查看dotnet-packaging 它包括一個dotnet deb命令行實用程序,它允許您創建一個.deb文件(即 Ubuntu 安裝程序),您可以使用它在 Ubuntu 上安裝您的應用程序。 它應該使您的部署更容易。

首先,您首先需要將此部分添加到您的.csproj文件中:

<ItemGroup>
  <PackageReference Include="Packaging.Targets" Version="0.1.45" />
  <DotNetCliToolReference Include="dotnet-deb" Version="0.1.45" />
<ItemGroup>

然后,運行dotnet restoredotnet deb -c Release -r ubuntu.18.04-x64 -f netcoreapp2.0 這將創建一個.deb文件,可用於將應用程序部署到 Ubuntu。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM