使用cmd“dotnet”启动应用程序失败,使用.exe可以工作

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

我有一个小型.Net 7.0应用程序,需要在Windows和Linux上运行。应用程序需要使用 pinvoke 调用 32 位 dll,因此无法选择以便携式为目标。配置了目标平台 ARM32 和 x86 的应用程序操作系统:

 <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <Platforms>ARM32;x86</Platforms>
</PropertyGroup>

应用程序的所有部分都有此配置。当我通过 VS 2022 或 Rider 启动应用程序时,它在我的 Windows 计算机上按预期运行。如果我尝试从 bin 启动构建输出,或者使用“dotnet”命令启动应用程序的发布构建,则会失败。

Release-Config

例外:

未处理的异常。 System.IO.FileLoadException:无法加载文件或程序集“EIS.Host,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”。

EIS.Host 是启动应用程序的启动项目的名称。创建的 exe 也称为“EIS.Host.exe”

我尝试了不同的配置,例如将其添加到csproj:

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <PlatformTarget>x86</PlatformTarget>
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <PlatformTarget>x86</PlatformTarget>
</PropertyGroup>

之后我切换到当前配置。

我尝试使用 Rider 和 vs2022 进行构建。我尝试通过 dotnet 启动 arm32 和 x86 的构建输出和发布输出(x86 直接在我的机器上,arm32 使用 wsl2)

c# .net
1个回答
0
投票

我找不到名为

Platforms
的 MSBuild 属性(例如,它不在这里)。您确定存在这样的财产吗?我只能找到
Platform
。也许 IDE 能够解析此类属性,但
dotnet
命令无法解析。

我会先尝试一下。如果是这种情况,您可以创建两个项目文件,一个用于 Linux 架构,另一个用于 Windows 架构。配置完成后,你可以尝试将其放入一个项目文件中。

如果仍然无法正常工作,请尝试删除 pinvoke 调用,然后删除项目文件中仅因 pinvoke 而添加的所有不必要的配置。只是为了让它进入能够使用

dotnet build
构建项目的状态。之后,尝试仅添加 pinvoke 代码和项目配置,例如对于 Windows 架构,再次尝试使用
dotnet
进行构建。以这种迭代的方式进行,以便更好地定位问题的确切位置。 (您也可能遇到
dotnet cli
本身的问题!)。

您也可以尝试手动删除所有bin和obj文件。有时

dotnet clean
不会删除所有
.dll
,导致
build
期间出现意外错误。

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