Prism 5 InteractionRequestTrigger と Visual Studio 2015 でビルド エラー

Visual Studio 2015 (Community Update2) で、WPF + Prism 5 を使ってアプリケーションの開発に挑戦しています。その中で、XAML デザイナーで Prism の InteractionRequestTrigger を使い、自作のアクション クラスをトリガーに設定すると、ビルド エラーが発生する問題に遭遇しました。

問題が起こった XAML はこんな感じです。

まず、上記【1】の InteractionRequestTrigger を宣言している箇所で、「ローカル プロパティ “Actions” は “TriggerBase” の派生型でのみ使用できます。」というビルド エラーになります[1]。さらに、【2】の FooAction (自作のアクション) を宣言している箇所で、「アセンブリ ‘(アセンブリ名)’ からの型 ‘FooAction’ は Blend SDK の古いバージョンでビルドされているため、Windows Presentation Framework 4 プロジェクトではサポートされません。」というビルド エラーになります[2]

また当然ながら、ビルド エラーが発生しているため XAML デザイナーのデザイン ビューの画面が「無効なマークアップ」となり、アプリケーションの UI が表示されなくなります。

エラー メッセージの内容から、参照アセンブリや Prism のバージョンに問題があるのかな?と思い、念のために調べたのですが、特に問題はなさそうです。(ちなみに、System.Windows.Interactivity.dll のアセンブリ バージョンは 4.5.0.0、ファイル バージョンは 3.0.40218.0 でした。また、Prism は 5 を使用しています。自作のアクションも、これらのアセンブリを参照してビルドされている事を確認しました。)

そして謎なことに、アプリケーションを実行して、当該のトリガー・アクションが実行される操作をしても、特に問題なく動きます。

なお、Visual Studio を起動した直後は、XAML デザイナーのデザイン ビューが「無効なマークアップ」とはなっておらず、きちんと画面のイメージが表示されています。ところが、ビルドしたタイミングで上記のエラーが発生して、「無効なマークアップ」となります。たまにビルド エラーが発生しないこともあったりして、とにかくよくわからない挙動です。

アプリケーションを実行する上では問題が無いものの、エラーが表示されているのは気持ち悪いし、デザイン ビューが使えないのもかなり不便なので、原因と回避方法を調べたところ、下記のページが見つかりました。

XAML designer will not display when using Blend SDK Behaviors – Visual Studio Connect フィードバック センター

結論としては、System.Windows.Interactivity.dll をグローバル アセンブリ キャッシュ (GAC) に登録すると上記の問題が発生しないようになったということのようです。

そこで、コマンド プロンプトを管理者として実行し、gacutil にてアセンブリを GAC に登録しました。具体的には、下記のコマンドを実行しました[3]

アセンブリを GAC に登録した後、Visual Studio を再起動すると、ビルド エラーが発生しなくなりました。しかし、根本原因がなんなのか、今もわかりません。どなたか、ご存知でしたら教えて下さい。

注釈

  1. ^ 英語のエラー メッセージは、「The local property “xxx” can only be applied to types that are derived from “TriggerBase”.」です。
  2. ^ 英語のエラー メッセージは、「The type ‘xxx’ from assembly ‘xxx’ is built with an older version of the Blend SDK, and is not supported in a Windows Presentation Framework 4 project.」です。
  3. ^ gacutil を実行するとき、当初 “C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin” の中にある gacutil.exe を実行したところ、「キャッシュにアセンブリを追加しているときにエラーが発生しました:このアセンブリは現在読み込まれているランタイムより新しいランタイムでビルドされているため、読み込むことができません。」というエラーになりました。SDK のバージョン 7.0A は、.NET Framework バージョンが 4 であることに対し、今回登録しようとしている System.Windows.Interactivity.dll は .NET Framework バージョンは 4.5 が必要なため、エラーになったのだと思われます。
This entry was posted in   WPF and tagged   .
Bookmark the   permalink.

KPDN

KPDN has written 21 articles

プログラミングとゲームが好きな、しがないにゃんこ好きです。わんこも同じぐらい好きです。最近、物忘れどんどんが酷くなってきた。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">