在Ubuntu上运行自包含的ASP.NETCore应用程序

nr9pn0ug  于 2023-06-21  发布在  .NET
关注(0)|答案(4)|浏览(167)

我已经发布了一个ASP.NETCore应用程序,作为一个面向Ubuntu的自包含应用程序。出版似乎工作得很好。我把文件复制到了一台漂亮的Ubuntu机器上。现在,我如何运行我的应用程序?
我的理解是,因为它是一个自包含的.NET Core应用程序,所以我 * 不 * 需要下载和安装.NET Core任何东西。我的应用程序应该包含它所需要的一切。
所有教程似乎都说我应该调用dotnet run。但是,“dotnet”命令行不存在(它应该发布到自包含的文件夹中吗??)所以如果我调用它,我得到“command not found”。当然,我可以下载.NET Core,但这不是违背了整个独立的概念吗?
下面是我正在复制的文件的示例:

eyh26e7m

eyh26e7m1#

回复

现在,我如何运行我的应用程序?我的理解是,因为它是一个自包含的. NET Core应用程序,所以我 * 不 * 需要下载和安装. NET Core任何东西。我的应用程序应该包含它所需要的一切。
你说得对。运行可执行文件。
创建自包含应用时,发布输出"包含启动应用所需的完整文件集(包括应用文件和所有. 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!");
    }
}

另请参阅

This document区分了依赖于框架的部署和自包含的部署。

yv5phkfx

yv5phkfx2#

按照以下步骤运行应用程序:
1.将您的应用程序发布为自包含应用程序:

dotnet publish -c release -r ubuntu.16.04-x64 --self-contained

1.将publish文件夹复制到Ubuntu计算机
1.打开Ubuntu机器终端(CLI)并转到项目目录
1.提供执行权限:

chmod +x ./appname

1.执行应用程序

./appname

**作者:**Harit Kumar
**此处的原始答案:***如何在Linux上运行.NET Core控制台应用程序 *

ecr0jaav

ecr0jaav3#

值得注意的是,对于.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>
  • 恢复和构建应用程序:dotnet restore && dotnet build -c release -r RUNTIME

其中RUNTIME是.csproj文件中列出的运行时之一。
重要的是要注意,如果不编辑.csproj文件并调用dotnet restore,您就无法执行此操作,否则将无法从NuGet下载运行时,并且-r ...标志将不起作用。

g2ieeal7

g2ieeal74#

你可能也想看看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。

相关问题