ここと MSDN フォーラムの両方で、この問題とこの問題の潜在的な解決策を見つけましたが、私の問題は少し異なります。Runtime クラスで ctor を呼び出すと、次の例外が発生します。
System.IO.FileNotFoundException: ファイルまたはアセンブリ 'INuiInstanceHelper, Version=1.0.0.10, Culture=neutral, PublicKeyToken=31bf3856ad364e35' またはその依存関係の 1 つを読み込めませんでした。
単純なシナリオ (たとえば、WPF の Loaded イベント。以下の単純なシナリオ コードを参照) でランタイムを構築する場合、このエラーは発生しません。
私の実際のシナリオでは、ユーザーがファイルを開くダイアログからファイルを開くと、ランタイムの ctor が呼び出されます。これは、ファイルを開くダイアログをラップする「サービス」を使用する ViewModel の MenuItem コマンドから開始されます。ファイル パスが指定された後、ViewModel はランタイムを初期化します。
void ExecuteOpenCommand()
{
var path = this.openFileService.OpenFile();
if (!string.IsNullOrEmpty(path))
{
var model = ViewModelLoader.ReadMainModel(path);
var viewModel = ViewModelLoader.LoadViewModel(model);
this.MainViewModel = viewModel;
this.MainViewModel.NuiService = this.nuiService;
this.nuiService.Initialize();
}
}
nuiService は、以前に初期化されていない場合、ランタイムを構築するだけです。
bool initialized;
public void Initialize()
{
if (initialized)
{
return;
}
try
{
this.runtime = new Runtime();
}
catch (FileNotFoundException ex)
{
Trace.WriteLine(ex.ToString());
}
// ...
initialized = true;
}
ただし、新しいWPF プロジェクトをゼロから開始してランタイムを構築すると、次のエラーは発生しません。
// does not throw exception
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Runtime r = new Runtime();
r.Initialize(RuntimeOptions.UseSkeletalTracking);
r.Uninitialize();
}
この例外をグーグルで検索すると、DirectX の更新、再起動、Windows の更新、または GAC への INuiInstanceHelper の再インストールが必要なソリューションに出くわしました。別の方法でエラーなしでランタイムを構築できるため、これらのソリューションがどのように役立つかわかりません。私の問題は、ユーザーが開始したこと(ボタンクリックなど)に関係していると思いましたが、ランタイムコンストラクターをアプリの起動近くで実行されるメソッドに移動したとき(インスタンス化されたViewModelのctorなど)宣言的にデータバインディングを介して)私はまだ問題を抱えていました。考え?