使用VS2022创建的单个exe文件部署不起作用,用于.NET 6 WPF应用程序。

11
我需要在Windows PC上执行一个.NET WPF程序的单个exe文件。此文件必须使用代码认证证书进行签名。有了这个证书,用户可以将此exe文件复制部署到可信任的位置,在外部Windows系统上执行,无需系统警告或管理员权限。 我可以使用VS2019和.NET 4.7.2来实现这一点。但我想向前迈进,使用VS2022和.NET 6.0。下面是使用VS2019的简单示例。您可以跳过signtool,因为在VS 2022中已经无法创建单个exe文件。同样的事情在过去的VS2019和.NET 5.0中也发生过,但是我发现一些帖子中说明单个exe文件与WPF首次在未来的.NET 6.0中运行。现在,.NET 6.0和VS2022发布后,我再次尝试它。部署助手中提供了更多单个文件的选项,但是没有任何内容创建单个exe文件! 在VS2019中的工作流程: 1. 我创建了WPF-App(.Net Framework) WPF4Test ,使用.Net Framework 4.7.2 2. 我在PostBuild步骤中加入了代码签名命令("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)) 3. 我构建发布,并在签名过程中输入证书密码 4. Bin\Release文件夹包含3个文件(WPF4Test.exe,WPF4Test.exe.config,WPF4Test.pdb) 5. 我将WPF4Test.exe复制到共享文件夹中,应用程序可以执行并已签名 我在VS2022中使用.NET 6测试过程: 1. 我创建了WPF-Application WPF6Test,使用.Net 6.0 2. 我将应用程序部署在一个文件夹中(在助手中,我必须两次选择文件夹) (默认设置为Release配置和目标运行时便携式) 3. pubxml被创建并且我发布应用程序 4. 部署文件夹包含5个文件(WPF6Test.deps.json,WPF6Test.dll,WPF6Test.exe,WPF6Test.pdb,WPF6Test.runtimeconfig.json) 5. 我将WPF6Test.exe复制到共享文件夹中,但是应用程序没有启动,也没有错误消息 如果我复制整个文件夹到共享中,应用程序就会运行。 我可以删除WPF6Test.deps.json和WPF6Test.pdb,但我需要三个文件(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文件进行签名?


1
请澄清您的具体问题或提供额外的细节,以准确突出您所需的内容。目前的描述不够清晰,很难确定您在询问什么。 - Community
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
14
你需要在项目文件中设置'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

2

编辑你的发布配置设置:

  • 选择部署模式为基于框架的。
  • 选择目标运行时与 Portable 不同的某个运行时(Portable 不支持生成单文件)。
  • 在文件发布选项下,选择生成单个文件。

保存配置设置后再次尝试发布。这应该会产生一个单一的 exe 文件。

如果将部署模式选择为 Self-Contained 或者 Independent,则会像你提到的那样生成 7 个文件。

希望这对于发布一个单一文件有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,