陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2167,comments - 570,views - 413万

在使用.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文件及资源,且运行正常。

 
posted on   宏宇  阅读(349)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2019-10-17 SCIE和SCI
2019-10-17 技嘉Z390 AORUS MASTER+酷睿I9超频5.0GHz教程
2018-10-17 VMware NAT模式多个虚拟机相互访问
2013-10-17 ASP.NET MVC 3:缓存功能的设计问题
2013-10-17 Asp.net mvc 网站之速度优化 -- 页面缓存
2007-10-17 一些我的程序世界观(想一点写一点)
2006-10-17 一个简单的分页代码
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示