首先,我是Linux新手,请原谅我。
我发布了一个ASP .NET Core应用程序作为针对Ubuntu的独立应用程序。发布似乎工作正常。我已经将这些文件复制到了一台漂亮的Ubuntu机器上。现在,我如何运行我的应用程序?我的理解是,因为它是一个独立的.NET Core应用程序,所以我不需要下载和安装.NET Core。我的应用应该包含它需要的一切。
所有教程似乎都说我应该调用$ dotnet run。但是“dotnet”命令行不存在(是否应该发布到自包含的文件夹中?)所以如果我调用它,我会得到“找不到命令”。当然我可以下载.NET Core,但这不是违背整个自包含的概念吗?以下是我正在复制的文件示例。
答案 0 :(得分:22)
现在,我该如何运行我的应用程序?我的理解是,因为它是一个独立的.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
...
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区分框架相关和自包含部署。
答案 1 :(得分:7)
请按照以下步骤运行您的应用程序:
将您的应用程序发布为独立的应用程序:
dotnet publish -c release -r ubuntu.16.04-x64 --self-contained
将publish
文件夹复制到Ubuntu计算机上
打开Ubuntu计算机终端(CLI)并转到项目目录
提供执行权限:
chmod 777 ./appname
执行应用程序
./appname
作者: Harit Kumar
此处的原始答案: How to run a .NET Core console application on Linux
答案 2 :(得分:4)
值得注意的是,使用.netstandard2 +时,需要两个步骤:
&LT;&的PropertyGroup GT;
<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>
&LT; /&的PropertyGroup GT;
dotnet restore && dotnet build -c release -r RUNTIME
其中RUNTIME是csproj文件中列出的运行时之一。
重要的是请注意,如果没有.csproj文件编辑和调用dotnet restore,则无法执行此操作,或者不会从nuget下载运行时,并且-r ...
标志将不起作用。
答案 3 :(得分:0)
您可能还想签出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。