![](/img/trans.png)
[英]Asp.Net Core WebAPI [dotnet publish --self-contained -r linux-64] is it really self-contained after putting into Docker container
[英]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!");
}
}
本文檔區分依賴於框架的部署和獨立的部署。
按照以下步驟運行您的應用程序:
將您的應用程序發布為自包含應用程序:
dotnet publish -c release -r ubuntu.16.04-x64 --self-contained
將publish
文件夾復制到 Ubuntu 機器
打開Ubuntu機器終端(CLI),進入項目目錄
提供執行權限:
chmod 777 ./appname
執行應用程序
./appname
添加一名作者
原始答案在這里: 如何在 Linux 上運行 .NET Core 控制台應用程序
值得注意的是,在.NET Standard 2+ 中,有兩個必需的步驟:
<物業組>
<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 restore
和dotnet deb -c Release -r ubuntu.18.04-x64 -f netcoreapp2.0
。 這將創建一個.deb
文件,可用於將應用程序部署到 Ubuntu。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.