Microsoft .NET MAUI part10 [Xamarin] (579レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
572: 08/11(月)13:26 ID:p1wBekRk(1)調 AAS
今回の2つの設定変更は、.NET 9 で Release ビルドのデフォルト動作が変わったことによる起動不能問題を回避しています。
---
① <PublishTrimmed>false</PublishTrimmed>
意味
IL trimming(未使用コード削除) を無効化します。
背景
.NET 9 では Release ビルド時のデフォルトで PublishTrimmed が true になり、リンク時に「使っていない」と判断されたコードを削除します。
問題点
リフレクション(Activator.CreateInstance や JsonSerializer)や動的ロードは、静的解析では使用箇所が見えません。
その結果、必要な型やメソッドが「不要」と誤判断されて削除され、実行時に
MissingMethodException
TypeLoadException
などが発生して、アプリが起動しなくなります。
対応
PublishTrimmed=false により trimming を完全に無効化 → 必要なコードが削除されず起動できるようになります。
② <RunAOTCompilation>false</RunAOTCompilation>
意味
AOT(Ahead-of-Time コンパイル) を無効化します。
背景
Android の Release ビルドでは、通常 IL を事前にネイティブコードに変換して配布(AOT)が行われます。
.NET 9 では AOT の挙動や組み合わせが変わり、Trim や Linker とセットでより aggressive(厳格)になりました。
問題点
AOT は起動時間短縮やパフォーマンス改善に有効ですが、以下の場合にクラッシュしやすくなります:
動的コード生成(Expression Trees, Reflection.Emit)
ジェネリック型のランタイム生成
Trim 済みコードとの依存関係不整合
.NET 9 での変更により、以前は動いていたコードが AOT 後に動かなくなるケースが増えました。
対応
RunAOTCompilation=false で JIT 実行に戻し、AOT に起因するクラッシュを回避します。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.019s