1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

.NET 8でAOT構築時のエラーを避ける方法

Last updated at Posted at 2024-02-11

前回の記事「.NET 8リリース後、JWT AuthenticationがAOTによって解決された」というもので、Visual Studio内で実行する分には問題ありませんが、デフォールトのリリース設定を使用するとエラーが発生します。
.NET 8がリリースされた後、JWT AuthenticationがAOTによって解決されました
桂素伟、 公式アカウント:桂迹.NET 8がリリースされた後、JWT AuthenticationがAOTによって解決されました
最初に、デフォールトでリリースする場合、ターゲットランタイムのデフォのルト設定は「ポータブル」で、以下のようなエラーが報告されます:
alt 画像
AOTメカニズムはネイティブ実行コードを生成するため、「ポータブル」という設定は正しくありません。正確に対応するプラットフォームを選択する必要があります。この例ではWindowsで、現在のAOTはx32をサポートしていないため、x64を選択します。
その後、再度リリースすると、システムはリリース成功と提示しますが、プログラムを実行すると、アプリがMicrosoft.AspNetCoreを見つからないというエラーを提示します、具体的なエラーは以下の通りです:
alt 画像
リリースに成功したのに、なぜファイルが見つからないのでしょうか。特に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)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?