【问题标题】:How to run .NET 5 WPF app without exe and console如何在没有 exe 和控制台的情况下运行 .NET 5 WPF 应用程序
【发布时间】:2021-12-02 21:39:45
【问题描述】:

我有一个为 AnyCPU 平台构建的 .NET 5 WPF 应用程序。 在项目文件中,我有: WinExe net5.0-windows

输出文件夹包含所有 dll 和一个 exe,但是当我在 32 位窗口上运行 exe 时,我收到以下消息:

此版本的software.exe与windows版本不兼容 你在跑。检查计算机的系统信息以查看 无论您需要 x86(32 位)还是 x64(64 位)版本的 程序,然后联系软件发行商。

为了简化部署和运行,无论目标系统如何,我都希望只有 1 个构建和 1 个快捷方式。 所以我最初的解决方案是使用 dotnet.exe 运行应用程序,并将核心 dll 作为参数。

dotnet.exe 软件.dll

WPF 应用程序启动并运行良好,但带有 dotnet 命令行的控制台在应用程序生命周期内保持打开状态。

当我使用 dotnet.exe 启动 WPF 应用程序时,是否有摆脱控制台的解决方案?

【问题讨论】:

  • 您在 Visual Studio 中检查过构建配置了吗?每个项目在解决方案中可以有不同的目标 CPU 设置。
  • 嗨@newky2k 感谢您的建议。我知道这种可能性,这是我现在使用的解决方法。我所有的项目都针对 AnyCPU 平台,除了针对 x86 的 WPF 项目。对我来说,这仍然是一种解决方法,希望有一个更清洁的解决方案。

标签: c# wpf .net-core .net-5


【解决方案1】:

目前没有 exe 文件的解决方案,所以作为一种解决方法,我找到了一种同时生成 32 位和 64 位 exe 的方法。

在 Visual Studio 构建配置管理器中,我添加了 x86 和 x64 平台。 其中用

更新了csproj
    <Platforms>AnyCPU;x86;x64</Platforms>

然后我在csproj中添加了

    <AssemblyName>MySoftware-$(Platform)</AssemblyName>

当我构建解决方案时,它会自动将目标平台附加到平台的 exe 和 dll 中。

MySoftware-x86.exe
MySoftware-x86.dll
MySoftware-x64.exe
MySoftware-x64.dll

最后,我使用脚本为 x86 和 x64 调用了两次“dotnet.exe build”。

【讨论】:

    【解决方案2】:

    综上所述,32 位机器可以通过 PE 运行任何东西 设置为 PE32,但 PE32+ 则没有。 64位机器可以运行 只要 32BIT 为 0,您的文件处于 64 位模式,但如果 32BIT 为 1,则 它必须使用 WOW64。

    https://illuminatedcomputing.com/posts/2010/02/sorting-out-the-confusion-32-vs-64-bit-clr-vs-native-cs-vs-cpp/

    为什么要编译特定于 32 位或 X64 还是 IA?通常是因为您正在 P/Invok'ing 到 x64 特定 本机dll。 corflags 告诉我们的有趣的事情是:

    • CLR 标头:编译器版本...2.0 是 .NET 1.1,2.5 是 .NET 2.0 3.0 是 .NET 3.5。不要问。 ;)
    • PE(便携式可执行文件):PE32 为 32 位,PE32+ 为 64 位。
    • 32BIT:我们是否要求强制 32 位 执行与否?

    www.hanselman.com/blog/32bitness-and-64bitness-and-migrating-dasblog-on-iis7-and-aspnet-under-vista64

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      相关资源
      最近更新 更多