CPF?使用C#的Native?AOT?發(fā)布程序的詳細(xì)過程
微軟已經(jīng)將AOT的包移到Nuget了,之前是在實(shí)驗(yàn)測試服務(wù)器上的。并且由之前的alpha版本改成了preview版本。
C#的開發(fā)效率,接近C++的運(yùn)行效率,而且可以防止反編譯,可以支持大部分反射功能。還有幾個(gè)小問題,暫時(shí)不能支持x86,win7上運(yùn)行aot的程序可能需要打補(bǔ)丁!
CPF里使用AOT需要將項(xiàng)目改成net5以上版本,因?yàn)閚et5之后才有COM的包裝器,如果你只是給自己的控制臺(tái)程序AOT的話,可以用低版本的netcore
使用方式很簡單,編輯csproj,加入下面一段代碼,另外CPF的包版本需要換成最新的
<PropertyGroup>
<IlcOptimizationPreference>Size</IlcOptimizationPreference>
<IlcGenerateStackTraceData>false</IlcGenerateStackTraceData>
</PropertyGroup>
<ItemGroup>
<RdXmlFile Include="rd.xml" />
<PackageReference Include="Microsoft.DotNet.ILCompiler" Version="7.0.0-preview.2.22152.2" />
</ItemGroup>一般建議根據(jù)發(fā)布平臺(tái)的注釋掉其他平臺(tái)的適配器,以及刪除其他平臺(tái)的引用,用來減少發(fā)布的程序大小。比如如果發(fā)布Windows上的,可以把Mac和Linux的注釋掉。
另外需要注意的是使用AOT方式發(fā)布的話,需要到對應(yīng)系統(tǒng)上發(fā)布,比如發(fā)布Linux的程序,就需要到Linux上發(fā)布。不支持跨操作系統(tǒng)編譯。


項(xiàng)目里增加個(gè)rd.xml文件,你可以根據(jù)需要添加一些反射的元數(shù)據(jù)描述
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Assembly Name="CPF" Dynamic="Required All" >
<Type Name="CPF.Animation.KeyFrame`1[[CPF.Drawing.Color,CPF]]" Dynamic="Required All" />
</Assembly>
<Assembly Name="CPF.Windows" Dynamic="Required All">
<Type Name="CPF.Windows.OpenGL.WglCreateContextAttribsARBDelegate" MarshalDelegate="Required All" />
</Assembly>
</Application>
</Directives>
一般的,項(xiàng)目右鍵,選擇發(fā)布。 如果你喜歡用命令行也是可以的。

選擇文件夾

設(shè)置好發(fā)布路徑,完成。


需要注意的是Windows端暫時(shí)只能用x64的,x86的好像還不行。需要用Release方式,Debug模式效果不好。設(shè)置好了之后,直接點(diǎn)發(fā)布。

之后一般等待一兩分鐘就行,你可以看到輸出那邊的相關(guān)信息

發(fā)布成功之后的程序,雙擊啟動(dòng)秒開,比非AOT發(fā)布的啟動(dòng)速度快多了。主程序小于30M,另外依賴一個(gè)7M的skia的dll



AOT后的程序也是可以調(diào)試的,帶上對應(yīng)的pdb文件,然后采用附加進(jìn)程的方式附加剛才啟動(dòng)的程序,然后就可以進(jìn)入斷點(diǎn)了

如果出現(xiàn)無法啟動(dòng)程序的情況,你可以先把項(xiàng)目輸出類型改成控制臺(tái)再AOT之后運(yùn)行,這樣就可以看到相關(guān)異常信息。比如反射類型缺失什么的,你可以編輯rd.xml文檔
更加詳細(xì)說明可以看看微軟的文檔 https://github.com/dotnet/runtimelab/tree/feature/NativeAOT/docs/using-nativeaot
到此這篇關(guān)于CPF 使用C#的Native AOT 發(fā)布程序的文章就介紹到這了,更多相關(guān)Native AOT 發(fā)布程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# 動(dòng)態(tài)調(diào)用WebService的示例
這篇文章主要介紹了C# 動(dòng)態(tài)調(diào)用WebService的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2020-11-11
C#實(shí)現(xiàn)HSL顏色值轉(zhuǎn)換為RGB的方法
這篇文章主要介紹了C#實(shí)現(xiàn)HSL顏色值轉(zhuǎn)換為RGB的方法,涉及C#數(shù)值判定與轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-06-06
c# 自定義值類型一定不要忘了重寫Equals,否則性能和空間雙雙堪憂
這篇文章主要介紹了c# 自定義值類型一定不要忘了重寫Equals,幫助大家提高c# 程序的性能,感興趣的朋友可以了解下2020-08-08
C#循環(huán)與循環(huán)控制的表達(dá)式樹實(shí)現(xiàn)
這篇文章介紹了C#循環(huán)與循環(huán)控制的表達(dá)式樹實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解
這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了順序表的定義、原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
C#判斷當(dāng)前程序是否通過管理員運(yùn)行的方法
這篇文章主要介紹了C#判斷當(dāng)前程序是否通過管理員運(yùn)行的方法,可通過非常簡單的系統(tǒng)函數(shù)調(diào)用實(shí)現(xiàn)對當(dāng)前程序是否通過管理員運(yùn)行進(jìn)行判定,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11
WPF程序?qū)⒖丶尸F(xiàn)的內(nèi)容保存成圖像
這篇文章介紹了WPF程序?qū)⒖丶尸F(xiàn)的內(nèi)容保存成圖像的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06

