在Ubuntu上运行自包含的ASP .NET核心应用程序

Mar*_*ark 15 linux ubuntu asp.net-core

首先,我是Linux新手,请原谅我.

我已经发布了一个ASP .NET Core应用程序作为针对Ubuntu的独立应用程序.发布似乎工作正常.我已将文件复制到一台非常香草的Ubuntu机器上.现在,我如何运行我的应用程序?我的理解是,因为它是一个独立的.NET Core应用程序,所以我不需要下载和安装.NET Core.我的应用应该包含它需要的一切.

所有教程似乎都说我应该调用$ dotnet run.但是"dotnet"命令行不存在(是否应该发布到自包含的文件夹中?)所以如果我调用它,我会得到"找不到命令".当然我可以下载.NET Core,但这不是违背整个自包含的概念吗?这是我正在复制的文件的示例.

在此输入图像描述

Sha*_*tin 26

回答

现在,我该如何运行我的应用程序?我的理解是,因为它是一个独立的.NET Core应用程序,所以我不需要下载和安装.NET Core.我的应用应该包含它需要的一切.

你是对的.运行可执行文件.

当您创建一个独立的应用程序时,发布输出"包含启动应用程序所需的完整文件集(包括您的应用程序文件和所有.NET Core文件)." 这包括可执行文件.

示例自包含部署

这是dotnet publish -c release -r ubuntu.14.04-x64一个简单的自包含应用程序的输出.将发布目录复制到Ubuntu并运行可执行文件.

C:\ MyApp的\ BIN \发布\netcoreapp1.0\ubuntu.14.04-64 \发布\

...

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

...
Run Code Online (Sandbox Code Playgroud)

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" : {}
  }
}
Run Code Online (Sandbox Code Playgroud)

C:\ MyApp的\的Program.cs

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

也可以看看

本文档区分了依赖于框架的部署和自包含的部署.

  • 对于我自己对 ubuntu 生活的无知:要运行可执行文件,请在终端上键入 .\ExecutableName。@ShaunLuttin 也许你可以将其包含在你的答案中。 (3认同)
  • @JP_medevice `*.exe` 扩展名是不适用于 Linux 的 Windows 约定。另见 https://askubuntu.com/questions/156392/what-is-the-equivalent-of-an-exe-file (2认同)
  • 实际上,您使用正斜杠来指定可执行文件的相对路径,而不是反斜杠。所以它是终端上的`./ExecutableName` (2认同)

Joh*_*eer 17

按照以下步骤运行您的应用程序:

  1. 将您的应用程序发布为自包含应用程序:

    dotnet publish -c release -r ubuntu.16.04-x64 --self-contained
    
    Run Code Online (Sandbox Code Playgroud)
  2. publish文件夹复制到Ubuntu机器

  3. 打开Ubuntu机器终端(CLI),进入项目目录

  4. 提供执行权限:

    chmod 777 ./appname
    
    Run Code Online (Sandbox Code Playgroud)
  5. 执行应用程序

    ./appname
    
    Run Code Online (Sandbox Code Playgroud)

添加一名作者

原始答案在这里: 如何在 Linux 上运行 .NET Core 控制台应用程序

  • 执行权限是关键! (2认同)

Dou*_*oug 6

值得注意的是,使用.netstandard2 +,需要执行两个步骤:

  • 编辑.csproj文件,并添加一行包含目标运行时的列表:

<PropertyGroup>

<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>
Run Code Online (Sandbox Code Playgroud)

</ PropertyGroup>

  • 恢复并构建应用程序: dotnet restore && dotnet build -c release -r RUNTIME

其中RUNTIME是csproj文件中列出的运行时之一。

重要的是请注意,如果不编辑.csproj文件并调用dotnet restore,则无法执行此操作,否则将无法从nuget下载运行时,并且该-r ...标记将不起作用。


Fre*_*ier 5

您可能还想查看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>
Run Code Online (Sandbox Code Playgroud)

然后,运行dotnet restoredotnet deb -c Release -r ubuntu.18.04-x64 -f netcoreapp2.0。这将创建一个.deb可用于将应用程序部署到 Ubuntu 的文件。