WPFプロジェクトに追加したいWinformユーザーコントロールがあります。
関連する参照(WindowsFormsIntegration、SystemWindowsForms、およびユーザーコントロールdll)を追加し、XAMLに次の行を追加しました。
xmlns:MyControl="clr-namespace:xx.xx.xx;Assembly=xx.xx"
そしてこれ:
<WindowsFormsHost><MyControl:control></MyControl:control></WindowsFormsHost>
「MyControl:」と書くと、「コントロール」は自動表示されます。つまり、VSがコントロールを認識し、すべての参照が正常に追加されたことを意味しますが、プロジェクトをコンパイルすると、タイトルにエラーが表示されます。
編集
すべてのプロジェクトをコンパイルすると、「タイプまたは名前空間の名前「xx」が見つかりませんでした...」というエラーが表示されますが、すべての参照を追加すると、VSが名前空間を認識するので、コンパイラがそれらが見つかりませんか?この問題が解決されれば、他の問題もなくなると思います。
解決策は次のとおりです。プロジェクトのプロパティに移動し、Target Framework
をClient Profile
から使用している.Netの完全バージョンに変更します。下の画像を参照してください。この問題は、DLLが完全な.NETFrameworkを対象とし、WPFアプリケーション(メインプロジェクト)が.Netクライアントプロファイルを対象としている場合に発生します。
これは、名前空間定義にアセンブリ名を含めたときに起こりましたが、両方のコントロールが同じアセンブリ内にありました。名前空間宣言のAssembly部分を削除するだけで、問題は解決しました。
Visual Studioは、反射のためにのみ参照をロードするため、正しいインテリセンスが正しく表示されます。ただし、コンパイルするには、コンパイラーは、参照されているdllが依存しているすべてのdllを必要とします。したがって、Visual Studioは、mycontrolを参照して見つけることができるため、インテリセンスを表示します。ただし、myontrolは、追加していない可能性のある他のdllを参照する場合があります。プロジェクトにmycontrolの依存参照も追加する必要があります。
また、プロジェクト間でターゲットフレームワークが異なる可能性もあります。 WPFページを使用してクラスライブラリdllをホストし、「任意のCPU」を対象としましたが、ホストアプリケーションは「x86」を対象としました。それらが一致すると、問題はなくなりました。
同じ "タイプまたは名前空間名 'xx'が見つかりませんでした..."の問題が発生しました。
Visual Studioファイルをローカルドライブに移動したの場合は表示されません。以前は共有ネットワークディレクトリに保存されていました。これの根本的な原因はわかりませんが、少なくとも今はデザイナーを実行させることができます。
以前にこの問題に遭遇したことがあり、<MyControl:control></MyControl:control>
を<MyControl:control/>
に置き換えるだけで解決しました。
理由はわかりません。最初の形式は、他のコントロールを含めることができるコントロール専用のようです。