1

ここと 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など)宣言的にデータバインディングを介して)私はまだ問題を抱えていました。考え?

4

1 に答える 1

2

答えは、プラットフォームターゲットをx86に変更することでした。何らかの理由で、AnyCPUに設定されました。grrrr...。

于 2011-07-11T21:48:35.483 に答える