如何在 Ubantu 机器中运行 32 位 dotnet 6 控制台应用程序

问题描述 投票:0回答:1

目前我已经使用 dotnet new console -n HelloWorld 创建了一个 .net 控制台应用程序。如果我尝试使用 dotnet build 构建它并使用 dotnet run 运行我可以看到输出。这个64位App的.csproj是这样的。

<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>net6.0</TargetFramework>
  <ImplicitUsings>enable</ImplicitUsings>
  <Nullable>enable</Nullable>
 </PropertyGroup>
</Project>

但是如果我尝试通过添加

<PlatformTarget>x86</PlatformTarget>

将其作为 32 位应用程序运行
<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>net6.0</TargetFramework>
  <ImplicitUsings>enable</ImplicitUsings>
  <PlatformTarget>x86</PlatformTarget>
 </PropertyGroup>
</Project>
 

然后,如果我尝试使用

dotnet build
构建此应用程序,我可以构建,但如果我尝试使用
dotnet run
运行,它会给我错误如下

Unhandled exception. System.BadImageFormatException: Could not load file or assembly 
'/home/simu_linux/Test/HelloWorld/bin/Debug/net6.0/HelloWorld.dll'. An attempt was made
 to load a program with an incorrect format. File name: 
'/home/simu_linux/Test/HelloWorld/bin/Debug/net6.0/HelloWorld.dll'

 

然后我尝试了几种方法来解决这个问题,我尝试直接从 bin 文件夹运行

dotnet <myapp>.dll
这也给出了相同的错误。我尝试使用
dotnet run -c Debug -r linux-x86
我收到以下错误

我尝试使用单声道,我可以使用

mono <myapp>.dll
运行这个 32 位,但如果我保留任何 System.IO 逻辑。

然后如果使用单声道

<myapp>.dll
那么我面临问题 我想我必须使用这个命令

dotnet run -c Debug -r linux-x86

但是由于我的ubantu中没有linux-86 RID,我该如何解决这个问题

c# linux cross-platform .net-6.0 32-bit
1个回答
0
投票

您在尝试在 Linux 系统上运行 32 位 .NET Core 应用程序时似乎遇到了问题。您看到的错误 System.BadImageFormatException 表示由于格式不正确而导致加载程序集出现问题。

以下是一些可以帮助您解决此问题的建议:

1.检查是否安装了32位运行环境:

确保您的 Ubuntu 系统上安装了 32 位版本的 .NET 运行时。您可以使用以下命令安装它:

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

2。更新目标框架:

在您的 .csproj 文件中,确保您拥有正确的 32 位目标框架。您可以尝试使用

net6.0-x86
作为 TargetFramework:

<PropertyGroup>
   <OutputType>Exe</OutputType>
   <TargetFramework>net6.0-x86</TargetFramework>
   <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

3.显式构建 32 位: 您可以在构建过程中使用

-r
选项显式构建 32 位,而不是依赖运行时标识符(
--runtime
选项):

dotnet build -r linux-x86

4。使用显式路径运行: 构建后,尝试通过指定 32 位二进制文件的完整路径来运行应用程序:

./bin/Debug/net6.0/linux-x86/HelloWorld

5. Check Dependencies:

确保您的应用程序使用的任何本机依赖项或库在 32 位版本中可用。

6。使用 dotnet 发布: 考虑使用

dotnet publish
创建应用程序的可发布版本。这可以帮助解决一些运行时问题。

尝试这些步骤,看看它们是否有助于解决问题。如果问题仍然存在,则可能存在有关您的应用程序或系统配置的特定详细信息需要进一步调查。

© www.soinside.com 2019 - 2024. All rights reserved.