如何在Linux上从.NET Core 2.0创建可执行的控制台应用程序?

25
据我所知,在 https://www.microsoft.com/net/learn/get-started/macos 中,我们只能运行它。
$ dotnet run

我需要创建一个控制台应用程序,可以在终端中执行,如下所示:

$ ./my_console_app file_inputs.txt

如何创建一个可在终端中运行的可执行文件?


7
我不明白为什么人们会给这个问题点踩,而我认为这是一个非常重要的问题 :( - Anang Satria
2个回答

38

为了在Linux中创建一个独立的控制台应用程序,您应该使用自包含部署(SCD)发布模式来发布您的dotnet core应用程序:

这将生成一个单一的二进制文件,其中包含目标框架,并且可以独立执行,无需任何额外的shell脚本或预安装的dotnet运行时。

我建议使用官方的dotnet cli console 模板,然后通过指定您使用的目标运行时(例如:linux-x64)和框架,将项目发布为--self-contained开关。

所以从基本的console模板开始:

dotnet new console -o myconsoleapp
cd myconsoleapp

根据您的业务逻辑编辑program.cs以处理您的输入文件或其他参数,例如:nano program.cs并添加类似以下内容:

using System;
namespace myconsoleapp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello Linux!");
            if (args.Length > 0) { Console.WriteLine("Input is: " + args[0]); }
        }
    }
}

通过使用dotnet run file_inputs.txt命令测试您的应用程序,它应该能够正确地在控制台上输出。

为了获取二进制文件和捆绑的框架以便分发,您应该运行dotnet publish命令:

dotnet publish -c release --self-contained --runtime linux-x64 --framework netcoreapp2.0

您可以将发布文件夹分发,然后通过以下方式轻松执行应用程序:

./myconsoleapp file_inputs.txt

这是一篇有关在dotnet core中创建独立Linux控制台应用程序的更为详细的文章:

此外,您还可以在publish页面了解其他可用的Linux模板:


嗨@muratiakos,那么通过这样做,我可以创建一个像我想要的可执行文件吗?看起来你没有回答我的问题。 - Anang Satria
现在已经添加了self-contained描述和文章参考,以生成一个无需外部脚本即可执行的单个二进制文件。 - muratiakos
谢谢,如果我们想发布一个独立的应用程序,这可能是一个不错的选择。+1 - Anang Satria

3

最终,我能够自己找到答案并解决了这个问题。 我创建了一个Shell脚本并使其可执行。

$ touch my_console_app
$ chmod 777 my_console_app

我把这个命令放到新创建的my_console_app文件中并保存。
dotnet run --project ./path/to/your/project.csproj "$1"

现在我可以使用可执行的shell脚本来运行和执行我的.NET Core项目,并能够接受参数参数。

$ ./my_console_app file_inputs.txt

编辑:

如果您只有来自 .net core 项目的 .dll 文件,您可以将 my_console_app 的内容更改为:

dotnet ./path/to/your/project.dll "$1"

4
如果你有时间的话,可以了解一下自包含部署和 dotnet publish --self-contained。这将向你展示一个更简单的方法。 - Lex Li
1
如果您已经预先安装了dotnet运行时,那么Shell包装器也是一个不错的选择,但您也可以查看我的有关SCD发布单个运行时捆绑部署的答案:https://dev59.com/G1UL5IYBdhLWcg3w27Nq#49692221 - muratiakos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接