【问题标题】:Deploy with VS2022 single exe-File for .Net 6 WPF-Application not works使用 .Net 6 WPF 应用程序的 VS2022 单个 exe 文件部署不起作用
【发布时间】:2021-11-12 09:27:48
【问题描述】:

我需要一个运行 .Net WPF 程序的 Windows 电脑上的单个 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 "my company name" /t @987654321 @ $(TargetPath)) 在后期构建步骤中
  • 我在签名过程中构建版本并输入证书密码
  • bin\Release 文件夹包含 3 个文件(WPF4Test.exe、WPF4Test.exe.config、WPF4Test.pdb)
  • 我将 WPF4Test.exe 复制到共享文件夹,并且应用程序是可执行和签名的

我在 VS2022 中使用 .Net 6 测试过程

  • 我使用 .Net 6.0 创建 WPF-Application 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 并添加带有更改的配置文件选项的附加 pubxml 文件(独立于部署模式,创建单个文件,激活编译准备运行)。 但现在我得到了 7 个文件(D3DCompiler_47_cor3.dll、PenImc_cor3.dll、PresentationNative_cor3.dll、vcruntime140_cor3.dll、WPF6Test.exe、WPF6Test.pdb、wpfgfx_cor3.dll)。

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

【问题讨论】:

  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: wpf deployment .net-6.0 visual-studio-2022 .net-core-publishsinglefile


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    即使您在生成自包含 exe 时勾选或设置单个 exe,它也不包括本机库。

    项目文件 (your-project.csproj)

    <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
    

    .Net CLI

    dotnet publish -r win-x64 /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --self-contained true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      相关资源
      最近更新 更多