狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

.NET 9 AOT的突破 - 支持老舊Win7與XP環境

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

引言

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

小知識普及:

  1. NET 9 AOT 簡介

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

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

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

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

本文只在分享網友及站長實踐的一個成果,如有更多發現,歡迎投稿或給本文PR。

Windows 7 支持

下圖是網友編譯的 Avalonia UI 跨平臺項目在 Win 7 非 SP1 環境運行效果截圖:

如上圖,左側是程序運行界面,右側是操作系統版本。

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

<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操作系統上運行,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>

上面關鍵配置說明:

  1. <PublishAot>true</PublishAot>

該開關用于支持AOT編譯發布

  1. <WindowsSupportedOSPlatformVersion>5.1</WindowsSupportedOSPlatformVersion>

支持在Windows XP或更高版本的Windows操作系統上運行

  1. VC-LTL

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

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

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

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

關于YY-Thunks:鏈接,說明:

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

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

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

經測試,Winform 可以.NET 9 x86 AOT發布后運行,效果截圖如下:

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 支持

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

網友得出結論:

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

大家可關注 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>

網友心得:

有待加強的部分

經測試Prism框架使用會報錯:

使用HttpClient也會出錯:

2024-08-02

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

主工程添加Roots.xml,內容如下:

<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也是類似的處理方法,這里不贅述,需要你進行更多嘗試。

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

結語

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

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

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

?轉自https://www.cnblogs.com/lsq6/p/18519287


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