繁体   English   中英

如何在没有 exe 和控制台的情况下运行 .NET 5 WPF 应用程序

[英]How to run .NET 5 WPF app without exe and console

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

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

此版本的 software.exe 与您运行的 Windows 版本不兼容。 检查您计算机的系统信息以了解您是否需要 x86(32 位)或 x64(64 位)版本的程序,然后与软件发行商联系。

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

dotnet.exe 软件.dll

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

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

目前没有没有 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”。

综上所述,一台 32 位机器可以在 PE 设置为 PE32 的情况下运行任何东西,但在 PE 为 PE32+ 的情况下则无法运行。 只要 32BIT 为 0,64 位机器就可以在 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 的 .NET 程序集? 通常是因为您正在 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM