Visual StudioでAvaloniaUI axaml previewができない場合の対処

2024/12/09に公開

Visual StudioでAvalonia UIのaxamlのプレビューが出ない場合の対処方法

使用環境

Windows 11 : Home 22H2 + Visual Studio Community 2022(64bit) Version 17.9.6
Avalonia 11.0.2

コンストラクタ中で例外が発生している

出力ウィンドウに以下が出力されている

object reference not set to an instance of an object

上記のエラーが発生している場合は、多くの場合はコード中のコンストラクタが実行された結果、previewに失敗している場合が多い。コンストラクタ中でnull pointer referenceが発生しているなど。
デザインモードでの実行かどうかはDesign.IsDesignModeで判定できるので以下のようなコードで例外の発生を回避する。

if (Design.IsDesignMode) return;

以下参考
https://stackoverflow.com/questions/17701545/how-to-avoid-a-object-reference-not-set-to-an-instance-of-an-object-exception

メッセージハンドラ中でエラーが発生している

例えば以下のようなものが出力ウィンドウに出力されている。
これはエラーメッセージの通り、特定のメッセージハンドラが呼ばれ、その結果として例外が発生している。

[Error] 22940 <= "Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object."
[Error] 22940 <= "   at CodeEditor2.Views.PopupMenuView.TextBox0_TextChanged(Object sender, TextChangedEventArgs e) in ....cs:line 55"

この場合も、コンストラクタでの問題と同じようにデザインモードで特定のコードの実行を避けることでプレビューできない問題を回避できる。

実行可能プロジェクトから参照されていない

AXAML プレビューに"No Executable Reference the library from an executable or wait for the solution to finish loading."という警告が出る。
これは複数のプロジェクトを持つソリューションを使っているときに、[ソリューション名].Desktopなどの実行可能プロジェクトから参照されていないプロジェクトのaxamlビューアで発生する。実行可能プロジェクトから直接参照されていないとaxamlプレビューは表示できない。
実行可能プロジェクトに対象プロジェクトへの参照を追加することで表示できるようになる。

Discussion