Avalonia项目打包安装包

要将 Avalonia 项目打包成安装包,你可以使用 Avalonia 发布工具来完成

1.创建一个发布配置文件

在你的 Avalonia 项目中,创建一个发布配置文件。在项目文件夹中创建一个名为 publish.xml 的文件,并添加以下内容:

<?xml version="1.0" encoding="utf-8"?>
<Publish xmlns="https://github.com/avaloniaui">
  <Executables>
    <Executable Identifier="YourAppName"
                MainClass="YourAppName.Program"
                OutputName="YourAppName" />
  </Executables>
  <VersionInfo CompanyName="Your Company"
               Description="Your App Description"
               ProductName="Your App Name"
               AssemblyVersion="1.0.0"
               FileVersion="1.0.0" />
</Publish>

2.打开命令行工具,并导航到你的 Avalonia 项目的根目录。

image-20230721193402672

3.运行以下命令来发布项目:

dotnet publish -c Release -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true /p:PublishReadyToRun=true /p:PublishReadyToRunShowWarnings=true /p:UseAppHost=true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true /p:SelfContained=true --self-contained true

其中,-r 参数表示发布目标平台,win-x64 代表 Windows 64 位。你可以根据需要替换为其他平台。
dotnet publish:这是用于执行发布操作的 .NET CLI 命令。

  • dotnet publish:这是用于执行发布操作的 .NET CLI 命令。
  • -c Release:指定发布的配置为 Release 模式,这将优化应用程序的性能和大小。
  • -r win-x64:指定目标运行时为 Windows x64 平台,发布输出将为该平台准备。
  • /p:PublishSingleFile=true:设置发布输出为单个可执行文件,将应用程序和其依赖项打包为一个文件。
  • /p:PublishTrimmed=true:启用发布优化,删除未使用的依赖项和代码来减小应用程序的大小。
  • /p:PublishReadyToRun=true:使用 ReadyToRun 编译器进行发布,可以提高应用程序的启动性能。
  • /p:PublishReadyToRunShowWarnings=true:在使用 ReadyToRun 编译器进行发布时显示警告信息。
  • /p:IncludeNativeLibrariesForSelfExtract=true:包含本机库以支持自解压功能,以便在运行时自动提取依赖项。

image-20230721193517827

4.运行结果

image-20230721193601691

运行成功后,你可以在输出目录中找到发布的文件。默认情况下,它们位于 bin\Release\netcoreapp3.1\publish 目录中。

5.查看打包地址

image-20230721195517478

运行TerraMours.Chat.Ava.exe,即可启动程序。

6.报错分析

通过以上的命令生成的exe可以直接运行,但是我遇到了调用三方接口时的报错。如下:

image-20230724134152687

报错的内容如下:

System.NotSupportedException: Thedeserialization constructor for typeOpenAI.ObjectModels .RequestModels.ChatMessage' containsparameters with null names . This might happen because theparameter names have been trimmed by ILLink. Consider using the source generated serializer instead

1.分析原因

错误消息表明,在类型的反序列化构造函数中存在具有空名称的参数。这可能是因为参数名称被 ILLink(一个.NET工具链)剪裁导致的。ILLink通过剪裁未使用的代码和元数据来减小应用程序的大小,但它可能会在处理构造函数参数名称时出现问题。

2.修改命令

从错误中可以看出是少了数据,是打包时候被剪裁掉了,应该是/p:PublishTrimmed=true 启用了发布优化,删除未使用的依赖项和代码来减小应用程序的大小,那么我们优化下发布命令,删掉/p:PublishTrimmed=true ,优化后的命令如下:

dotnet publish -c Release -r win-x64 --self-contained true /p:PublishSingleFile=true /p:PublishTrimmed=false /p:PublishReadyToRun=true /p:IncludeNativeLibrariesForSelfExtract=true

这样打包时就不会删除依赖项,新的打包成果,接口调用正常:

image-20230724134801869

3.生成程序对比

不过对应的程序大小会不同。下面是前后两次的打包的程序大小的对比

发布优化:

image-20230724135002791

不优化:

image-20230724135029367

程序大小的对比还是很明显的,/p:PublishTrimmed=true 会大大的优化程序大小。所以在程序发布时可以优先开启发布优化,如果遇到问题,再关闭,毕竟程序越小越好。

image-20230721195636763

7.项目介绍

本项目是基于Avalonia的智能AI会话项目。采用的是最新稳定版本11.0.0-rc1.1。希望通过该项目了解和学习Avalonia开发的朋友可以在我的github上拉取代码,同时希望大家多多点点star。

https://github.com/raokun/TerraMours.Chat.Ava

V1.0版本

下载地址:V1.0版本win64下载地址

目前可用的第一个版本
功能:

  • 最全的接口参数配置
  • 支持反向代理
  • 支持聊天记录的数据本地化存储
  • 支持填写SystemMessage

8.技术总结记录

目前打包只发布了Win64的安装包,后续测试linux安装包的发布。目的是在国产国产麒麟系统中运行本程序。

面目技术总结记录在我的博客中

基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发1-通用框架

基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发2-功能开发

Avalonia项目打包安装包

阅读如遇样式问题,请前往个人博客浏览: www.raokun.top

拥抱ChatGPT:https://ai.terramours.site

开源项目地址:https://github.com/raokun/TerraMours.Chat.Ava