.net core 2.0 在 ubuntu 上运行控制台应用程序时出错

Posted

技术标签:

【中文标题】.net core 2.0 在 ubuntu 上运行控制台应用程序时出错【英文标题】:.net core 2.0 error running console app on ubuntu 【发布时间】:2018-02-26 03:15:29 【问题描述】:

我正在尝试在 ubuntu 16.04-x64 上运行我的第一个 .net core 2.0 控制台应用程序。 我按照步骤为 ubuntu 发布了我的应用程序:

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

并且还通过像这样更改我的 .csproj 文件从 Visual Studio 中进行了尝试:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RuntimeIdentifiers>ubuntu.16.04-x64</RuntimeIdentifiers>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="sharpadbclient" Version="2.1.0" />
    <PackageReference Include="System.IO.Ports" Version="4.4.0" />
  </ItemGroup>

</Project>

然后使用发布配置文件发布它。

我按照微软的指示去install .net core on ubuntu。 当我尝试运行控制台应用程序的 .dll 文件时,我将发布的输出复制到运行 ubuntu ans 的 PC 上,但出现此错误:

Unhandled Exception: System.IO.FileLoadException: 
Could not load file or assembly
'System.Console, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)
   at LinuxVersion.Program.InitializeComponent()
   at LinuxVersion.Program.Main(String[] args)
Aborted (core dumped) 

当我运行 dotnet restore 时,我收到一条消息:

MSBUILD : error MSB1003: Specify a project or solution file.
The current working directory does not contain a project or solution file.

我是否在此过程中遗漏了一个步骤?

【问题讨论】:

你到底在哪里运行 dotnet restore 命令? 在运行 ubuntu 的目标 PC 上 您是使用./yourappname 运行已发​​布的应用程序还是dotnet yourappname.dll?由于这是一个独立的部署,很可能只有第一个可以工作 - 即使这样,您也应该为 .net core 2.0 使用 linux-x64 而不是 ubuntu* 我实际上使用的是第二种方法dotnet myappname.dll,但我会尝试你建议的第一种方法。您认为这可能是导致此特定错误的原因吗?另外,您的意思是:使用linux-x64 而不是ubuntu*?您的意思是在dotnet publish 命令中吗? Running Self-contained ASP .NET core application on Ubuntu的可能重复 【参考方案1】:

好吧,事实证明,使用 Visual Studio 发布配置文件(右键单击项目并选择“发布”)发布应用程序和使用命令行发布应用程序是有区别的。 当我使用 Visual Studio 发布配置文件时出现此错误,然后我切换到使用命令行,如下所示:dotnet publish -c release -r ubuntu.16.04-x64 但要运行它,我进入了输出的发布文件夹:cd /home/MyApp/publish,然后使用 dotnet MyAppName.dll 运行应用程序。

这为我解决了。

【讨论】:

以上是关于.net core 2.0 在 ubuntu 上运行控制台应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

Docker & ASP.NET Core 2.0 微服务跨平台实践

Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署

现在在.net core 2.0当中,有没有连接MySQL数据库的方法

如何在 net-core 2.0 中手动解析 JSON 字符串

.Net Core 2.0 Windows 服务

Azure Functions .NET Core 中的 EF Core 2.0 连接字符串