首页 > 编程语言 >使用vs2022将.net8的应用程序发布为一个单独文件

使用vs2022将.net8的应用程序发布为一个单独文件

时间:2024-10-17 20:44:06浏览次数:7  
标签:文件 x86 win 应用程序 发布 添加 vs2022 net8 true

在使用.NetCore3.1时,可以通过设置以下工程配置文本来将项目发布为一个单独的应用程序文件:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UseWPF>true</UseWPF>
	  <PublishSingleFile>true</PublishSingleFile>
	  <RuntimeIdentifier>win-x86</RuntimeIdentifier>
	  <!--PublishTrimmed>true</PublishTrimmed-->
  </PropertyGroup>
 
</Project>

1.如果直接将.NetCore3.1升级为.net8,发布时可能会弹出如:不再需要使用Microsoft.NET.Sdk.WindowsDesktop SDK。请考虑将根项目元素的Sdk届性更改为“Microsoft.NET.Sdk”的错误。

将工程配置项目修改为:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
	  <PublishSingleFile>true</PublishSingleFile>
	  <RuntimeIdentifier>win-x86</RuntimeIdentifier>
	  <!--PublishTrimmed>true</PublishTrimmed-->
  </PropertyGroup>
</Project>
 

2.发布为单个文件时的配置如下:
在这里插入图片描述
3.发布时,如弹出以下错误:无法复制文件“……\userProject\obj\Release\net8.0-windows\win-x86\singlefilehost.exe”,原因是找不到该文件。需要在userProject.csproj中添加如下元素:

<SelfContained>true</SelfContained>
 

 

4.此时生成的文件还不是最终的,同时生成的依赖还有vcruntime140_cor3.dll及wpfgfx_cor3.dll。若需要将这两个库依赖也包含进去,则还需要添加元素:

<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
 

 

同时,生成的独立文件体积也成倍增加。

5.裁剪体积:

只添加:

<PublishTrimmed>true</PublishTrimmed>
 

 

发布生成时报:
“启用剪裁时,不支持或不推荐使用 WPF。请转到 https://aka.ms/dotnet-illink/wpf 以了解详细信息。”

解决:
添加:

<_SuppressWpfTrimError>true</_SuppressWpfTrimError>
 

 

再次调试时出运行时错误:

NotSupportedException: Built-in COM has been disabled via a feature switch. See https://aka.ms/dotnet-illink/com for more information.

解决:

添加:

<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
 

 

调试可以正常了。发布后运行,却不能正常启动。

解决:

添加:

<TrimMode>partial</TrimMode>
 

 

6.最终如下:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
	  <PublishSingleFile>true</PublishSingleFile>
	  <RuntimeIdentifier>win-x86</RuntimeIdentifier>
	  <SelfContained>true</SelfContained>
      <PublishTrimmed>true</PublishTrimmed>
      <_SuppressWpfTrimError>true</_SuppressWpfTrimError>
      <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
      <TrimMode>partial</TrimMode>
  </PropertyGroup>
</Project>
 

7.后记

6最终的版本发布的文件仍然过大,故后来没有采用这种方式,又发布选项进行修改,部署模式选择依赖框架。工程配置如下:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <PublishSingleFile>true</PublishSingleFile>
    <RuntimeIdentifier>win-x86</RuntimeIdentifier>
	 <!--SelfContained>true</SelfContained-->
	 <!--PublishTrimmed>true</PublishTrimmed>
	 <TrimMode>partial</TrimMode>
	 <_SuppressWpfTrimError>true</_SuppressWpfTrimError>
	 <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
	 <IncludeContentInSingleFile>true</IncludeContentInSingleFile>
	 <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract-->
  </PropertyGroup>
</Project>
 

最终发布的文件只有十几MB,也包含了所有的外部DLL文件及资源,且运行正常。

 

标签:文件,x86,win,应用程序,发布,添加,vs2022,net8,true
From: https://www.cnblogs.com/cuihongyu3503319/p/18473038

相关文章

  • 应用程序框架基础
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • 如何在不删除应用程序的情况下释放 iPhone/iPad 上的空间
    您是否经常收到存储空间已满的提示?当您的iPhone存储空间不足时,您将无法安装新的应用程序、拍照或下载文件。如果您正在使用所有应用程序且不想卸载任何应用程序,可以采取哪些措施来释放iPhone上的一些空间呢?本文将向您展示如何在不删除任何应用程序的情况下释放iPhone的空间。......
  • Python桌面应用程序中的用户界面优化与体验
    Python桌面应用程序中的用户界面优化与体验从零开始:打造你的第一个Python桌面应用快速搭建基础界面:窗口、按钮和标签视觉盛宴:美化你的应用程序界面使用样式表定制外观:QtStyleSheets(QSS)示例图标与图像:让应用图标更吸引人添加应用图标主题切换:实现深色模式与浅色模......
  • 【Azure 环境】请求经过应用程序网关,当响应内容大时遇见504超时报错
    问题描述API调用过程中,一旦遇到数据量大的场景下,返回504 超时的错误。注意: 请求首先达到ApplicationGateway,然后转发到后端的AppService服务中。 问题解答这可能与应用程序网关的“响应缓存区”配置有关:应用程序网关的响应缓冲区可以收集后端服务器发送的全部或部分......
  • 基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
    前言今天大姚给大家分享一款基于.NET8+Vue/UniApp前后端分离的快速开发框架,开箱即用:ZR.Admin.NET。开源免费(基于MITLicense开源协议)、代码量少、学习简单、通俗易懂、功能强大、易扩展、轻量级,让web开发更快速、简单高效(从此告别996),解决70%的重复工作,专注您的业务,轻松开......
  • c# .net8 winform 嵌入 wpf 控件
    .netframework例子很多,但.netcore的很难找,经过和gpt很长时间的沟通,完成了。关键点是vs2022似乎还不支持设计时的ElementHost,所以必须通过代码初始化。1.新建一个wpf控件库2.创建一个导圆角的TextBox,控件名为 UserControl13.winform项目添加对wpf控件库项目......
  • 如何打包和分发 Python 应用程序
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介所有使用包管理器(例如pip)下载的Python库(即应用程序包)都是使用专门执行此任务的实用程序进行分发的。这些实用程序创建“Python分发”,基本上是版本化(和压缩的)存档......
  • [Java/日志] 日志框架打印应用程序日志代码的执行情况
    0引言我常以为INFO日志级别的应用程序日志代码,不会被执行(比如,实验1中的printTestLog函数)。但今天线上的问题,证实了这个思路是错的。1验证实验版本信息jdk:1.8日志组件slf4j.version:1.7.25log4j.version:2.20.0<!--log[start]--><dependency>......
  • 使用 Spring 框架构建 MVC 应用程序:初学者教程
    SpringFramework是一个功能强大、功能丰富且设计精良的Java平台框架。它提供了一系列编程和配置模型,旨在简化和精简Java中健壮且可测试的应用程序的开发过程。人们常说Java太复杂了,构建简单的应用程序需要很长时间。尽管如此,Java提供了一个稳定的平台,周围有一个非常成熟......
  • 我被 .NET8 JIT 的一个BUG反复折磨了半年之久
    很久很久没有写过博客了,正好最近园子又挣得一线生机,必须得凑个热闹水一篇.事情是这样的,在今年的早些时候,把公司的一部分api服务器的.net版本从6升级到了8,毕竟6马上就是EOL了(.NET6TLS到2024年11月12日).没成想在升级完的3个月后竟然触发了一个.NET8runtimeJIT的B......