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

在使用.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>netcoreapp3.1</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>netcoreapp3.1</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>

相关推荐

  1. 使用GDCM库.gz文件转换.dcm文件测试程序

    2024-01-27 14:20:02       62 阅读
  2. 【WPF.NET开发】字体与应用程序一起打包

    2024-01-27 14:20:02       58 阅读
  3. .NET Core 应用程序发布指南

    2024-01-27 14:20:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-27 14:20:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 14:20:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 14:20:02       87 阅读
  4. Python语言-面向对象

    2024-01-27 14:20:02       96 阅读

热门阅读

  1. SpringTask定时任务

    2024-01-27 14:20:02       59 阅读
  2. springbootv 2.4.0跨域

    2024-01-27 14:20:02       56 阅读
  3. 24校招,经纬恒润测试工程师PPT技术二面

    2024-01-27 14:20:02       56 阅读
  4. Qt程序设计-U盘检测(windows)

    2024-01-27 14:20:02       55 阅读
  5. C++特殊类设计

    2024-01-27 14:20:02       45 阅读
  6. 网站服务器出错的原因是什么?

    2024-01-27 14:20:02       53 阅读
  7. SpringMVC之REST风格

    2024-01-27 14:20:02       61 阅读
  8. 2024-01-24-redis学习笔记

    2024-01-27 14:20:02       39 阅读
  9. springmvc-dispatcherserlet

    2024-01-27 14:20:02       50 阅读
  10. XR虚拟拍摄技术:开启短剧与微剧的全新篇章

    2024-01-27 14:20:02       76 阅读
  11. 使用 Spark MLlib 使用 jieba 分词训练中文分类器

    2024-01-27 14:20:02       55 阅读
  12. SASS简介及使用方法

    2024-01-27 14:20:02       50 阅读
  13. 【办公自动化】Python中的BeautifulSoup

    2024-01-27 14:20:02       56 阅读
  14. PHP AES加解密:用代码为数据加上保护的盾牌

    2024-01-27 14:20:02       55 阅读