【发布时间】: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