使用 .Net 6 WPF 应用程序的 VS2022 单个 exe 文件进行部署不起作用

Ral*_*ann 11 deployment wpf .net-core-publishsinglefile .net-6.0 visual-studio-2022

我需要在 Windows PC 上执行 .Net WPF 程序的单个 exe 文件。该文件必须使用代码身份验证证书进行签名。有了这个证书,exe 文件就可以在外部 Windows 系统上执行,而无需系统警告或用户将部署复制到受信任位置后的管理权限。

我可以使用 VS2019 和 .Net 4.7.2 来完成此操作。但我想继续使用 VS2022 和 .Net 6.0。下面是一个使用 VS2019 的简单示例。您可以跳过signtool,因为在VS 2022中已经无法创建单个exe文件。VS 2019 和 .Net 5.0 过去也发生过同样的情况,但我找到了一些帖子,其中包含 WPF 的单个 exe 文件将来首先可以与 .Net 6.0 一起使用的信息。现在,在 .Net 6.0 和 VS2022 发布后,我再次尝试。对于单个文件的部署辅助有更多选项可用,但没有任何东西会创建单个 exe 文件!

VS2019中的工作流程:

  • 我使用 .Net Framework 4.7.2 创建 WPF-App(.Net Framework)WPF4Test
  • 我把代码签名命令(“C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\signtool.exe”sign /a /n“我的公司名称”/t http:// timestamp构建后步骤中的.comodoca.com/authenticode $(TargetPath))
  • 我在签名过程中构建版本并输入证书密码
  • bin\Release 文件夹包含 3 个文件(WPF4Test.exe、WPF4Test.exe.config、WPF4Test.pdb)
  • 我将 WPF4Test.exe 复制到共享文件夹,并且应用程序可执行并签名

我用.Net 6在VS2022中测试流程

  • 我使用 .Net 6.0 创建 WPF 应用程序 WPF6Test
  • 我将应用程序部署在一个文件夹中(在助手中我必须选择文件夹两次)(默认设置配置发布和目标运行时可移植)
  • 创建 pubxml 并且我发布应用程序
  • 部署文件夹包含 5 个文件(WPF6Test.deps.json、WPF6Test.dll、WPF6Test.exe、WPF6Test.pdb、WPF6Test.runtimeconfig.json)
  • 我将 WPF6Test.exe 复制到共享文件夹,但应用程序无法启动且没有错误消息

如果我复制整个文件夹以共享并运行应用程序。我可以删除 WPF6Test.deps.json 和 WPF6Test.pdb,但我需要 3 个文件(WPF6Test.dll、WPF6Test.exe、WPF6Test.runtimeconfig.json)。

我返回到 VS2022 并添加带有更改的 profile 选项的附加 pubxml 文件(独立于部署模式、创建单个文件、激活编译准备运行)。但现在我得到7个文件(D3DCompiler_47_cor3.dll、PenImc_cor3.dll、PresentationNative_cor3.dll、vcruntime140_cor3.dll、WPF6Test.exe、WPF6Test.pdb、wpfgfx_cor3.dll)。

我需要做什么才能获得单个 exe 文件?如何在发布过程中签署此 exe 文件?

Ric*_*Web 17

您需要在项目文件中设置“IncludeAllContentForSelfExtract”,或者如果您使用 CLI 构建“IncludeNativeLibrariesForSelfExtract”。

即使您勾选或设置单个 exe,如果您正在生成一个自包含的 exe,它也不会包含本机库。

项目文件 (your-project.csproj)

<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
Run Code Online (Sandbox Code Playgroud)

.Net CLI

dotnet publish -r win-x64 /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --self-contained true
Run Code Online (Sandbox Code Playgroud)


Sur*_*amy 2

编辑您的发布配置文件设置,

  • 选择部署模式为依赖于框架
  • 选择除 Portable 以外的目标运行时(生成单个文件不适用于 Portable)
  • 在文件发布选项下,选择生成单个文件

保存配置文件设置并再次尝试发布。这应该会生成一个 exe 文件。

如果您选择部署模式为“自包含”或“独立”,它将生成您提到的 7 个文件。

希望这有助于发布到单个文件!