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 项目的根目录。
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
:包含本机库以支持自解压功能,以便在运行时自动提取依赖项。
4.运行结果
运行成功后,你可以在输出目录中找到发布的文件。默认情况下,它们位于 bin\Release\netcoreapp3.1\publish
目录中。
5.查看打包地址
运行TerraMours.Chat.Ava.exe,即可启动程序。
6.报错分析
通过以上的命令生成的exe可以直接运行,但是我遇到了调用三方接口时的报错。如下:
报错的内容如下:
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
这样打包时就不会删除依赖项,新的打包成果,接口调用正常:
3.生成程序对比
不过对应的程序大小会不同。下面是前后两次的打包的程序大小的对比
发布优化:
不优化:
程序大小的对比还是很明显的,/p:PublishTrimmed=true
会大大的优化程序大小。所以在程序发布时可以优先开启发布优化,如果遇到问题,再关闭,毕竟程序越小越好。
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