

はじめに
テクノロジーの進歩に伴い、Microsoftの. NET Frameworkはイテレーションごとに驚くべき新機能を提供しています。. NET 9リリースの特に注目すべきハイライトの1つは、AOT(Ahead-of-Time)サポートです。これにより、開発者はコンパイル時にWindows 7やWindows XPを含む古いWindowsシステムで実行できるようにアプリケーションを最適化できます。これはパフォーマンスを向上させるだけでなく、これらの古いプラットフォームに依存している企業や個人開発者に新たな可能性をもたらします。
** 知識の普及:**
- Net 9 AOTの概要
NET 9のAOTコンパイラは、. NETアプリケーションを静的コンパイルによってターゲットマシン上で直接実行できる実行可能ファイルに変換し、実行時のJIT(ジャストインタイム)コンパイルに必要な時間とリソースを排除します。これは、パフォーマンス要件が高く、レガシーシステムをサポートする必要があるシナリオに大きな利点があります。
- Windows 7およびWindows XPのサポートの背景
Windows 7とXPはもはや主流のオペレーティングシステムではありませんが、企業のレガシーシステム、組み込み機器、またはリソースに制約のある環境などの特定の分野で広く使用されています。NET 9のAOTは、これらのシナリオの互換性とパフォーマンス要件を満たすように設計された拡張機能です。
- 実現方法は
- ** コンパイルプロセスの最適化 **:NET 9では、AOTコンパイル時にコードがより詳細に最適化され、生成される実行ファイルが小さくなり、起動が高速になります。
- ** 後方互換性**:よく設計されたコンパイル戦略により、Windows 7およびXP APIとの互換性が確保され、コードがシームレスに実行されます。
- ** セキュリティ上の考慮事項 **:レガシーシステムをサポートしながら、. NET 9はセキュリティに焦点を当て、潜在的なリスクに対する保護レベルを提供します。
- アプリケーションと利点の例
- ** パフォーマンスの向上 **:AOTコンパイルされたプログラムは、特にCPU負荷の高いタスクでは、JIT実行プログラムよりも高速です。
- ** 簡単な導入 **:. NETランタイムをインストールする必要がないため、導入プロセスが簡素化されます。
- ** メンテナンスコストの削減 **:レガシーシステムに依存している企業は、頻繁なアップグレードのトラブルを回避できます。
この記事は、ネチズンとウェブマスターの実践の結果を共有するだけで、より多くの発見がある場合は、投稿やこの記事へのPRを歓迎します。
Windows 7のサポート
以下は、Windows 7 非SP 1環境で実行されるAvalonia UIクロスプラットフォームプロジェクトのスクリーンショットです。

上の図のように、左側がプログラム実行インタフェース、右側がオペレーティングシステムのバージョンです。


コードをコピーしやすくするために、リファレンス構成を以下に示します。
<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>
上記の主な構成の説明
<PublishAot>true</PublishAot>
このスイッチはAOTコンパイルパブリケーションをサポートするために使用されます
<WindowsSupportedOSPlatformVersion>5.1</WindowsSupportedOSPlatformVersion>
Windows XP以降のWindowsオペレーティングシステムでの動作をサポート
VC-LTL
VC-LTLは、アプリケーションのサイズを削減し、msvcr120.dll、api-ms-win-crt-time-l 1 -1-0.dllなどのMicrosoftランタイムDLLの依存関係を排除するために、Microsoft VCの変更をベースにしたオープンソースのランタイムです。
Windows 7以降では、AOTが動作する可能性があります(. NETランタイムのインストールは不要です)。ターゲットシステムで失敗する可能性もあります。ライブラリを追加して再AOTコンパイルを試みます。詳細はリポジトリを参照してください。https//github.com/Chuyu-Team/VC-LTL
** ウェブマスターによる測定:Windows 7にはY-Thanksパッケージの追加が必要な場合があります。
<PackageReference Include="YY-Thunks" Version="1.1.4-Beta3" />
关于YY-Thunks:链接,说明:
ご存知のように、Windowsのアップデートごとに多くのAPIが追加されるため、Windowsの異なるバージョンとの互換性には多くの労力がかかります。その結果、多くのオープンソースプロジェクトはWindows XP RTMのような以前のバージョンのWindowsと互換性がなくなった。
プログラムの入力ポイントを特定できない問題を迅速かつ効率的に解決する方法はありませんか?
YY-Thunksの目的は、異なるシステム間の違いを滑らかにすることであり、コンパイル時にobjを追加するだけで、これらの互換性の問題を自動的に解決できます。古いバージョンのWindowsとの互換性がはるかに簡単に!
テスト後、Winformは. NET 9 x 86 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へのリンクが必要です。http//github.com/Chuyu-Team/YY-Thunks前述したように、Windows 7でも失敗した場合にパッケージ参照の試みを追加できます

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 的源码及作者
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も同様のアプローチですが、ここでは触れません。もっと試す必要があります。
各企業の異なるプロジェクトは非常に異なり、複雑であり、実際のリリースも継続的にテストする必要があり、Windows 7をサポートするために、Windows XPはライブラリの置き換え、APIの選択やその他の操作の一部を使用する必要があるかもしれません。
おわりにまとめ
NET 9のAOTサポートは間違いなく. NETエコシステムの範囲を拡大し、レガシープラットフォーム上で高性能アプリケーションを実行する必要がある開発者に強力なツールを提供します。テクノロジーが進化するにつれて、より多くの. NETバージョンが限界を押し広げ、プログラミングをより柔軟かつ効率的にすることを期待しています。
感谢网友GSD及M$達分享的这个好消息,大石头这篇文章《各版本操作系统对.NET 支持情况》推荐大家阅读:https://newlifex.com/tech/os_net
AOTプロジェクトを参照https//github.com/dotnet9/CodeWF.Toolbox
** 技術交流**
ソフトウェア開発技術交流QQグループを追加:77199230 0
或扫站长微信(codewf,备注加群)加入微信技术交流群:
