在 Ubuntu 20.04 上运行 dotnet 应用程序
Posted
技术标签:
【中文标题】在 Ubuntu 20.04 上运行 dotnet 应用程序【英文标题】:Run dotnet application on Ubuntu 20.04 【发布时间】:2021-09-10 06:16:42 【问题描述】:我是 Linux 网络核心的新手,我有一个问题。我安装了 .net core 5 并编写了名为“hello”的 hello world 应用程序。之后,我转到项目 bin 目录并运行我的应用程序:
dotnet hello.dll
一切都好。但我也在 bin 目录中看到“hello”(共享库)文件。我可以在终端中运行它:
./hello
所有作品... 但是当我将文件复制到另一个位置(远离项目目录)时,我无法像这样运行我的应用程序:./hello 我在终端中收到消息“分段错误(核心转储)”。
请告诉我,为什么在复制文件后,命令“./hello”不起作用(但 dotnet hello.dll 起作用)。
Ubuntu 20.04
.NET SDK 已安装:5.0.301
.NET 运行时安装:5.0.7
更新 项目地点:
/RiderProjects/RabbitMq-example/RabbitMq-example/bin/Debug/net5.0
我只将 net5.0 文件夹复制到:
/RiderProjects/RMQ/net5.0
我得到分段错误。
如果我复制完整的 bin 文件夹(如:
/RiderProjects/RMQ/bin/Debug/net5.0
一切都好。
步骤:
-
创建文件夹(例如 HelloApp)
在文件夹中,打开终端并使用 dotnet new console
项目创建后,在此文件夹中使用dotnet publish(构建操作后会创建bin文件夹)
(按当前步骤,我有 RiderProjects/HelloApp/bin/Debug/net5.0/publish)
将 publish/ 文件夹(包含文件)复制到另一个位置(在我的情况下,它是
RiderProjects/发布)
发布文件夹中的 dotnet HelloApp.dll 工作正常,但 ./HelloApp 不起作用
【问题讨论】:
原始文件夹(或相关文件夹)中是否还有其他dll文件?你是复制到同一个驱动器吗?你用什么命令来复制文件?复制的 dll 文件大小是否与原始文件完全相同?分段错误通常是由于对象超出了分配给应用程序的内存。 存在已知错误 (bugs.launchpad.net/ubuntu/+source/python-apt/+bug/1907676) 该错误已在 20.04.2.0 中修复。 你在复制前运行./hello
,但在复制后运行./hello.sh
,为什么?
@LeiYang 对不起,拼写错误。我修好了。
@jdweng 我用 CTRL+C 复制它,然后通过 ubuntu 的用户界面用 CTRL+V 粘贴。是的,复制到同一个驱动器并且文件是原始大小。
【参考方案1】:
如果您通过 snap install 安装了 dotnet 运行时,则只能通过“sudo dotnet ...”访问它。我在 VS Code 中遇到了同样的问题,它在没有 sudo 的情况下运行 dotnet 命令,并且我收到了“分段错误(核心转储)”错误。我通过 apt-get 安装 dotnet 运行时解决了(现在安装在“/usr/bin ...”中并且无需 sudo 即可工作(参见:https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu#2004-))
【讨论】:
以上是关于在 Ubuntu 20.04 上运行 dotnet 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在 Ubuntu 20.04 上使用远程证书的 Nuget 包还原失败无效
我看不到在 ubuntu 20.04 上运行 docker compose 容器