「MyTest.TestApplication」と呼ばれる WPF アプリケーションと「MyTest.ClassLibrary」と呼ばれるクラス ライブラリの 2 つのプロジェクトを含むソリューションがあり、対応するデフォルトの名前空間があります。MyTest.TestApplication には、MyTest.ClassLibrary への参照があります。MyTest.ClassLibrary には、MyTest.ClassLibrary.TestClass というクラスが含まれています。このクラスのインスタンスをアプリケーションのリソースに追加したいのですが、URL を Xml 名前空間の値として使用します。
そこで、MyTest.ClassLibrary.AssemblyInfo.cs を開いて、
using System.Windows.Markup
ディレクティブ、そして最後に次の行を追加します
[assembly: XmlnsDefinition("http://schemas.test.com/test", "MyTest.ClassLibrary")]
プロジェクトをビルドし、MyTest.TestApplication.App.Xaml に移動して、名前空間の定義を Application 要素に追加します。xmlns:t=" と入力するとすぐに、アセンブリ名と URI のインテリセンス リストが表示されますが、http://schemas.test.com/testは表示されません。とにかく名前空間の定義を追加すると、次のようになります。
xmlns:t="http://schemas.test.com/test"
Resources 要素に以下を追加します。
<t:TestClass x:Key="myTest" />
そのリソースは作成されず、Xaml エディターはクラス TestClass が名前空間http://schemas.test.com/testに存在しないと不平を言います。
イライラすることに、WpfCustomControlLibrary1 というデフォルトの WPF カスタム コントロール ライブラリを追加し、次の行を追加しました。
[assembly: XmlnsDefinition("bluh", "WpfCustomControlLibrary1")]
WpfCustomControlLibrary1.AssemblyInfo.cs に対して、プロジェクトをビルドし、MyTest.TestApplication でそれを参照し、App.xam で xmlns:b=" と入力し始めるとすぐに、IntelliSense は一番上に "bluh" を含む名前空間のリストを表示します.
あらゆる種類のアセンブリを追加し、MyTest.ClassLibrary にディレクティブを使用しようとしましたが、スキーマ URL を介して Visual Studio でアセンブリを見つけることができません。驚くべきことに、次のように名前空間をアセンブリ名に設定すると機能します。
xmlns:t="clr-namespace:MyTest.ClassLibrary;assembly=MyTest.ClassLibrary"
それで..ここで何が起こっているのですか?
編集:イライラすることに、WPFアプリケーションから参照を削除してから再度追加するだけで、2時間検索した後、ようやく機能するようになりました。うーん。これはVS2012のバグの一種だと思いますか?