1

WPFウィンドウからアクセスする必要のある2つのclrnamespaceがあり、名前が衝突しています。

xmlns:ns1="clr-namespace:Namespace1.Namespace2.Namespace3.Namespace4;assembly="
xmlns:ns2="clr-namespace:Namespace2;assembly=Namespace2"

Namespace2のようなものを使いに行くとき

<Canvas>
  <ns2:MyControl ... />
</Canvas>

次のコンパイルエラーが発生します

The type or namespace name 'MyControl' does not exist in the namespace 'Namespace1.Namespace2' (are you missing an assembly reference?)

名前空間の命名はあまり良くないことは知っていますが、前者を変更するにはシステムの他の場所で使用されている構造から離れる必要があり、後者を変更するにはシステムの他の部分を変更する必要があります。

誰かがこれを回避する方法について何か提案がありますか?

4

1 に答える 1

1

「xmlns:」を使用して解決策が見つからない場合は、を使用XmlnsDefinitionして複数のclrnamespacesをURIで識別されるXML名前空間にマップし、そのURIを使用してclr名前空間のセットを参照することを検討できます。

XmlnsDefinitionグループ化AssemblyInfo.csするCLRタイプを含む各アセンブリのにを入れます。

[XmlnsDefinition("http://www.mycompany.com/appname", "Namespace1.Namespace2.Namespace3.Namespace4")]

[XmlnsDefinition("http://www.mycompany.com/appname", "Namespace2")]

次に、XAMLで次のことができます。

xmlns:ns="http://www.mycompany.com/appname"

そして、共通のプレフィックスを使用してタイプにアクセスできるようになります。


一方、Namespace2 DLLへの参照をプロジェクトに追加するのを忘れた可能性がありますか?

上記のいずれも機能しない場合は、プロジェクト構造をもう少し詳しく説明できますか。たとえば、MyControlコードを表示できますか...それが存在する場所...およびコードの名前空間ステートメントも表示できます。

于 2012-09-13T09:32:15.620 に答える