前回の記事「.NET 8リリース後、JWT AuthenticationがAOTによって解決された」というもので、Visual Studio内で実行する分には問題ありませんが、デフォールトのリリース設定を使用するとエラーが発生します。
.NET 8がリリースされた後、JWT AuthenticationがAOTによって解決されました
桂素伟、 公式アカウント:桂迹.NET 8がリリースされた後、JWT AuthenticationがAOTによって解決されました
最初に、デフォールトでリリースする場合、ターゲットランタイムのデフォのルト設定は「ポータブル」で、以下のようなエラーが報告されます:
AOTメカニズムはネイティブ実行コードを生成するため、「ポータブル」という設定は正しくありません。正確に対応するプラットフォームを選択する必要があります。この例ではWindowsで、現在のAOTはx32をサポートしていないため、x64を選択します。
その後、再度リリースすると、システムはリリース成功と提示しますが、プログラムを実行すると、アプリがMicrosoft.AspNetCoreを見つからないというエラーを提示します、具体的なエラーは以下の通りです:
リリースに成功したのに、なぜファイルが見つからないのでしょうか。特にMicrosoft.AspNetCoreファイルで、理論上このNugetパッケージは早いバージョンで不要になりました。ここでは、ファイルが不足しているか、環境に問題があると疑われやすいです。しかし、リリースは成功したのに、実行に問題があるということです。しかし、よく観察すると、リリースが成功したとしても、リリース時のコマンドラインプロンプトに「ILC: Method '[AOTDemo01_dotnet8]Program.$(string[])' will always throw because: Failed to load assembly 'Microsoft.AspNetCore'」という情報があり、実際にはリリース中にMicrosoft.AspNetCoreが見つからないと言及されています。しかし、この時点での提示は名前空間であるため、間接的にリリースが失敗したことを意味します。
この情報を見て、環境に問題があると疑うかもしれません。実際、AOTはネイティブコードをリリースするわけですから。そのため、リリース設定をさらに確認する必要があります。この時、「デプロイモード」オプションは「フレームワーク依存」になっています。AOTはasp.net coreのランタイムに依存することはありませんので、ここを変更しないと、パッケージの検索にこの部分が含まれず、リリースされたアプリケーションには自然とMicrosoft.AspNetCoreの名前空間が欠けることになります。「デプロイモード」を「独立」に切り替えて、再リリースすると成功し、正常に実行できるようになります。すると、15.5Mのexeが手に入ります。
したがって、Visual StudioはAOTプロジェクトであるかどうかを判断し、リリースファイル内でサポートされていないターゲットフレームワークとターゲットランタイムを自動的に非表示にするとより良いでしょう。
また、コマンドラインでdotnet publish -r win-x64を使用すると、直接成功することができます。やはりコマンドラインが最強ですね、コマンドラインのデフォルトリリース位置は:bin\Release\net8.0\win-x64\publishです。
(Translated by GPT)