欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

.NET 9 AOT的突破 - 支持老舊Win7與XP環(huán)境

freeflydom
2024年11月7日 9:42 本文熱度 653

引言

隨著技術(shù)的不斷進(jìn)步,微軟的.NET 框架在每次迭代中都帶來了令人驚喜的新特性。在.NET 9 版本中,一個特別引人注目的亮點是 AOT( Ahead-of-Time)支持,它允許開發(fā)人員將應(yīng)用程序在編譯階段就優(yōu)化為能夠在老舊的 Windows 系統(tǒng)上運行,包括 Windows 7 和甚至 Windows XP。這不僅提升了性能,也為那些依然依賴這些老平臺的企業(yè)和個人開發(fā)者提供了新的可能性。

小知識普及:

  1. NET 9 AOT 簡介

.NET 9 的 AOT 編譯器通過靜態(tài)編譯,將.NET 應(yīng)用程序轉(zhuǎn)換為可以直接在目標(biāo)機器上執(zhí)行的可執(zhí)行文件,消除了在運行時的 JIT(Just-In-Time)編譯所需的時間和資源。這對于對性能要求高且需要支持舊版系統(tǒng)的場景具有顯著優(yōu)勢。

  1. 支持 Windows 7 與 Windows XP 的背景

盡管 Windows 7 和 XP 已經(jīng)不再是主流操作系統(tǒng),但它們在某些特定領(lǐng)域,如企業(yè)遺留系統(tǒng)、嵌入式設(shè)備或者資源受限的環(huán)境中仍有廣泛應(yīng)用。.NET 9 的 AOT 編譯這一擴展,旨在滿足這些場景的兼容性和性能需求。

  1. 如何實現(xiàn)
  • 編譯過程優(yōu)化:NET 9 在 AOT 編譯時,對代碼進(jìn)行了更為細(xì)致的優(yōu)化,使得生成的可執(zhí)行文件更小,啟動速度更快。
  • 向下兼容性:通過精心設(shè)計的編譯策略,確保了對 Win7 及 XP API 的兼容性,使代碼能夠無縫運行。
  • 安全性考量:雖然支持老舊系統(tǒng),但.NET 9 依然注重安全,提供了一定程度的保護(hù)機制以抵御潛在的風(fēng)險。
  1. 實例應(yīng)用與優(yōu)勢
  • 性能提升:AOT 編譯后的程序通常比 JIT 執(zhí)行的程序更快,尤其對于 CPU 密集型任務(wù)。
  • 部署簡易:無需用戶安裝.NET 運行時,簡化了部署流程。
  • 維護(hù)成本降低:對于依賴?yán)吓f系統(tǒng)的企業(yè),避免了頻繁升級運行時的困擾。

本文只在分享網(wǎng)友及站長實踐的一個成果,如有更多發(fā)現(xiàn),歡迎投稿或給本文PR。

Windows 7 支持

下圖是網(wǎng)友編譯的 Avalonia UI 跨平臺項目在 Win 7 非 SP1 環(huán)境運行效果截圖:

如上圖,左側(cè)是程序運行界面,右側(cè)是操作系統(tǒng)版本。

為了便于讀者代碼拷貝,參考配置貼出如下:

<Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
		<OutputType>WinExe</OutputType>
		<TargetFramework>net9.0-windows</TargetFramework>
		<Nullable>enable</Nullable>
		<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
		<ApplicationManifest>app.manifest</ApplicationManifest>
		<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
		<PublishAot>true</PublishAot>
	</PropertyGroup>
	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
		<InvariantGlobalization>true</InvariantGlobalization>
        <!--支持在Windows XP或更高版本的Windows操作系統(tǒng)上運行,XP下嘗試Ava失敗-->
		<WindowsSupportedOSPlatformVersion>5.1</WindowsSupportedOSPlatformVersion>
		<RuntimeIdentifier>win-x64</RuntimeIdentifier>
		<TargetPlatformMinVersion>5.1</TargetPlatformMinVersion>
	</PropertyGroup>
	<ItemGroup>
		<PackageReference Include="VC-LTL" Version="5.1.1-Beta3" />
	</ItemGroup>
	<ItemGroup>
		<PackageReference Include="Avalonia" Version="11.1.1" />
		<PackageReference Include="Avalonia.Desktop" Version="11.1.1" />
		<PackageReference Include="Avalonia.Themes.Fluent" Version="11.1.1" />
		<PackageReference Include="Avalonia.Fonts.Inter" Version="11.1.1" />
		<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
		<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.1.1" />
		<PackageReference Include="Avalonia.ReactiveUI" Version="11.1.1" />
	</ItemGroup>
</Project>

上面關(guān)鍵配置說明:

  1. <PublishAot>true</PublishAot>

該開關(guān)用于支持AOT編譯發(fā)布

  1. <WindowsSupportedOSPlatformVersion>5.1</WindowsSupportedOSPlatformVersion>

支持在Windows XP或更高版本的Windows操作系統(tǒng)上運行

  1. VC-LTL

VC-LTL是一個基于微軟VC修改的開源運行時,有效減少應(yīng)用程序體積并擺脫微軟運行時DLL,比如msvcr120.dll、api-ms-win-crt-time-l1-1-0.dll等依賴。

Win7及以上版本,可能AOT就能正常運行(不需要安裝.NET運行時)。但也有可能在目標(biāo)系統(tǒng)運行失敗,可添加該庫嘗試重新AOT編譯。詳細(xì)原理參考該倉庫:https://github.com/Chuyu-Team/VC-LTL

經(jīng)站長實測:Windows7可能還需要添加YY-Thunks包引用:

<PackageReference Include="YY-Thunks" Version="1.1.4-Beta3" />

關(guān)于YY-Thunks:鏈接,說明:

眾所周知,從 Windows 的每次更新又會新增大量 API,這使得兼容不同版本的 Windows 需要花費很大精力。導(dǎo)致現(xiàn)在大量開源項目已經(jīng)不再兼容一些早期的 Windows 版本,比如 Windows XP RTM。

難道就沒有一種快速高效的方案解決無法定位程序輸入點的問題嗎?

YY-Thunks(鴨船),存在的目的就是抹平不同系統(tǒng)的差異,編譯時單純添加一個 obj 即可自動解決這些兼容性問題。讓你兼容舊版本 Windows 更輕松!

經(jīng)測試,Winform 可以.NET 9 x86 AOT發(fā)布后運行,效果截圖如下:

Winform 工程配置如下:

可拷貝配置如下:

<Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
		<OutputType>WinExe</OutputType>
		<TargetFramework>net9.0-windows</TargetFramework>
		<Nullable>enable</Nullable>
		<UseWindowsForms>true</UseWindowsForms>
		<ImplicitUsings>enable</ImplicitUsings>
	</PropertyGroup>
	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
		<InvariantGlobalization>true</InvariantGlobalization>
		<WindowsSupportedOSPlatformVersion>5.1</WindowsSupportedOSPlatformVersion>
		<RuntimeIdentifier>win-x64</RuntimeIdentifier>
		<TargetPlatformMinVersion>5.1</TargetPlatformMinVersion>
		<PublishAot>true</PublishAot>
		<_SuppressWinFormsTrimError>true</_SuppressWinFormsTrimError>
	</PropertyGroup>
	<ItemGroup>
		<PackageReference Include="VC-LTL" Version="5.1.1-Beta3" />
		<PackageReference Include="WinFormsComInterop" Version="0.5.0" />
	</ItemGroup>
</Project>

入口再加一句代碼ComWrappers.RegisterForMarshalling(WinFormsComInterop.WinFormsComWrappers.Instance);

using System.Runtime.InteropServices;
namespace WinFormsAotDemo;
internal static class Program
{
    /// <summary>
    ///  The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        // To customize application configuration such as set high DPI settings or default font,
        // see https://aka.ms/applicationconfiguration.
        ComWrappers.RegisterForMarshalling(WinFormsComInterop.WinFormsComWrappers.Instance);
        ApplicationConfiguration.Initialize();
        Application.Run(new Form1());
    }
}

Windows XP 支持

目前測試可運行控制臺程序:

網(wǎng)友得出結(jié)論:

XP 需要鏈接 YY-Thunks,參考鏈接:https://github.com/Chuyu-Team/YY-Thunks(前面有提及,Win7如果失敗也可以添加該包引用嘗試)

大家可關(guān)注 YY-Thunks 這個 ISSUE:https://github.com/Chuyu-Team/YY-Thunks/issues/66

控制臺支持 XP 的工程配置如下:

<Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
		<OutputType>Exe</OutputType>
		<TargetFramework>net9.0</TargetFramework>
		<ImplicitUsings>enable</ImplicitUsings>
		<Nullable>enable</Nullable>
	</PropertyGroup>
	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
		<InvariantGlobalization>true</InvariantGlobalization>
		<WindowsSupportedOSPlatformVersion>5.1</WindowsSupportedOSPlatformVersion>
		<SupportWinXP>true</SupportWinXP>
		<PublishAot>true</PublishAot>
	</PropertyGroup>
	<ItemGroup>
		<PackageReference Include="VC-LTL" Version="5.1.1-Beta3" />
	</ItemGroup>
</Project>

網(wǎng)友心得:

有待加強的部分

經(jīng)測試Prism框架使用會報錯:

使用HttpClient也會出錯:

2024-08-02

通過閱讀開源Avalonia主題庫 [Semi.Avalonia](irihitech/Semi.Avalonia: Avalonia theme inspired by Semi Design (github.com)) 的源碼及作者 Rabbitism 兔佬的PR已經(jīng)解決Prism問題的,其它庫問題使用方法應(yīng)該類似,修改如下:

主工程添加Roots.xml,內(nèi)容如下:

<linker>
    <assembly fullname="CodeWF.Toolbox.Desktop" preserve="All"/>
    <assembly fullname="Ursa.PrismExtension" preserve="All" />
    <assembly fullname="Prism" preserve="All" />
    <assembly fullname="DryIoc" preserve="All" />
    <assembly fullname="Prism.Avalonia" preserve="All"/>
    <assembly fullname="Prism.DryIoc.Avalonia" preserve="All"/>
    <assembly fullname="CodeWF.Toolbox" preserve="All" />
</linker>

主工程添加該XML配置:

<ItemGroup>
    <TrimmerRootDescriptor Include="Roots.xml" />
</ItemGroup>

HttpClient也是類似的處理方法,這里不贅述,需要你進(jìn)行更多嘗試。

每個公司的不同項目都是極其不同、復(fù)雜的,實際發(fā)布還需要不斷測試,為了支持Windows7、Windows XP可能不得不做出使用庫替換、部分API使用取舍等操作,歡迎讀者將使用過程中的心得體會進(jìn)行分享。

結(jié)語

.NET 9 的 AOT 支持無疑拓寬了.NET 生態(tài)的應(yīng)用范圍,為那些需要在老舊平臺上運行高性能應(yīng)用的開發(fā)者提供了強大的工具。隨著技術(shù)的發(fā)展,我們期待未來更多的.NET 版本能夠進(jìn)一步打破界限,讓編程變得更加靈活和高效。

感謝網(wǎng)友GSDM$達(dá)分享的這個好消息,大石頭這篇文章《各版本操作系統(tǒng)對.NET 支持情況》推薦大家閱讀:https://newlifex.com/tech/os_net

參考AOT項目:https://github.com/dotnet9/CodeWF.Toolbox

?轉(zhuǎn)自https://www.cnblogs.com/lsq6/p/18519287


該文章在 2024/11/7 9:42:12 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved