![](/img/trans.png)
[英]Two things; console app run without .exe and args (C# console app)
[英]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。
为什么要编译特定于 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 位执行?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.