要将 Avalonia 项目打包成安装包,你可以使用 Avalonia 发布工具来完成
在你的 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>
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
:包含本机库以支持自解压功能,以便在运行时自动提取依赖项。运行成功后,你可以在输出目录中找到发布的文件。默认情况下,它们位于 bin\Release\netcoreapp3.1\publish
目录中。
运行TerraMours.Chat.Ava.exe,即可启动程序。
通过以上的命令生成的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
错误消息表明,在类型的反序列化构造函数中存在具有空名称的参数。这可能是因为参数名称被 ILLink(一个.NET工具链)剪裁导致的。ILLink通过剪裁未使用的代码和元数据来减小应用程序的大小,但它可能会在处理构造函数参数名称时出现问题。
从错误中可以看出是少了数据,是打包时候被剪裁掉了,应该是/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
这样打包时就不会删除依赖项,新的打包成果,接口调用正常:
不过对应的程序大小会不同。下面是前后两次的打包的程序大小的对比
发布优化:
不优化:
程序大小的对比还是很明显的,/p:PublishTrimmed=true
会大大的优化程序大小。所以在程序发布时可以优先开启发布优化,如果遇到问题,再关闭,毕竟程序越小越好。
本项目是基于Avalonia的智能AI会话项目。采用的是最新稳定版本11.0.0-rc1.1。希望通过该项目了解和学习Avalonia开发的朋友可以在我的github上拉取代码,同时希望大家多多点点star。
https://github.com/raokun/TerraMours.Chat.Ava
下载地址:V1.0版本win64下载地址
目前可用的第一个版本
功能:
目前打包只发布了Win64的安装包,后续测试linux安装包的发布。目的是在国产国产麒麟系统中运行本程序。
面目技术总结记录在我的博客中
基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发1-通用框架
基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发2-功能开发
阅读如遇样式问题,请前往个人博客浏览: www.raokun.top
拥抱ChatGPT:https://ai.terramours.site