web-dev-qa-db-ja.com

WPF:名前は名前空間に存在しません

私はVS2013を使用してC#/ WPFアプリケーションを構築していますが、次のクラス定義があります(実行中のアプリケーションの同じアセンブリ内):

namespace MyNamespace
{
    public class MyKey
    {
        public MyKey() { }
        public string name = "";
    }
}

MainWindow.xamlには次のものがあります。

<Window x:Class="MyNamespace.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyNamespace"
        Title="MainWindow" Height="350" Width="525" WindowState="Maximized" WindowStyle="None">
    <Window.Resources>
        <local:MyKey x:Key="key" />
    </Window.Resources>
...

VSはそれを報告し続けます

名前「MyKey」はネームスペース「clr-namespace:MyNamespace」に存在しません

何か案は?

追伸私は次の解決策を試してみました(stackoverflowで既に投稿された質問から)が、どれも機能しませんでした:

  1. クラスを別のネームスペースに移動してから、xamlリファレンスで新しいネームスペースを使用する
  2. VSの再起動とソリューションのクリーニング/再構築
  3. ソリューションをクリーニングしてからそのフォルダーの名前を変更し、ソリューションを再度ビルドする
  4. 参照の変更:

xmlns:local = "clr-namespace:MyNamespace; Assembly ="

編集:追加情報:ターゲットアーキテクチャ:X64、ターゲットフレームワーク:.Net 4.5

25
Ibraheem

この既知のVSバグの一般的な解決策の1つは、ビルドのターゲットプラットフォームを変更することです。

  1. 現在のビルドターゲットプラットフォームがx64の場合、x86に変更します。現在x86の場合は、x64に変更します。

  2. 新しいターゲットプラットフォーム向けのクリーンおよびビルドソリューション。

  3. 目的のターゲットプラットフォームに戻り、再構築します。

52
Gordon True

VS2012 Express Editionでも同じ問題が発生しました。コマンドを使用して問題を解決しました

vs2012コマンドプロンプトの「WDExpress/ResetSettings」。

https://stackoverflow.com/a/33706647/4855197

2
Adeeb Arangodan

考えられる解決策の1つは、すべての。dllファイルをDebugおよびReleaseフォルダーから削除することです。

なぜなら、プロジェクトを参照するときは、デバッグモードでプロジェクトを実行していても、ビルド済みのdllを参照することがあるためです。

debugおよびreleaseフォルダーからすべてのファイルを削除し、そのプロジェクトを再度ビルドします。このプロジェクトの参照を必要な場所に追加します。私の側では完璧に機能しました。

1
Khawaja Asim

通常、この問題が発生すると、Visual Studioがエラーリストに「間違った」エラーをリストし、間違った方向に進むことに気付きました。 Visual Studioの出力ウィンドウで実際のビルド出力を見ると、正しいエラーが示されていました。

つまり、ビルド出力とエラーリストを比較します。

0
Daniel

VS Enterprise 2017バージョン15.6.2の実行.Net 4.6.1のターゲット設定

リソース内でValueConverterを参照しようとしているUserControl xamlページでも同じ問題が発生しました。名前空間は正しく、インテリセンスはそれをドロップインしますが、デザイナーはページをロードせず、コードはコンパイルしません。値コンバーターの1つを問題のファイルと名前空間から移動して、コードビハインドに移動することも試みました。 VSは非常に驚いていたため、分離コードコンストラクターのInitializeComponent()メソッドが存在しないと主張していました。

最終的にそれを修正したと思うのは、ValueConverterクラスに次のような主要な属性が欠けていることに気付いたときです:

[ValueConversion(typeof(string)、typeof(decimal))]

その行を追加したら、簡単な解決策をきれいにしてコンパイルし、それからコンパイルして動作しました。その後、突然、xamlはそのファイル内のすべての検証ルールと値コンバーターを見ることができました。そして今、そのファイルの他の3つの値コンバーターにもValueConversion属性がありませんが、コードは今でもコンパイルされることに気付きました。たぶん、最初のコンバーターの入力タイプについて何かがあいまいでした。

まだ謎です。変更を元に戻してエラーが再現可能かどうかを確認する必要があることは知っていますが、そのコードと1日ほとんど戦った後、私はそれを見てうんざりしています。実行されていない古いPrismプロジェクトであったため、Prism 7.0ライブラリにアップグレードしました。また、すべてのプロセッサ設定を「任意のCPU」にリセットしようとしました。ブートストラップが時代遅れになっていると不平を言っていましたが、私はそれを無視しました。再起動してすべてを何度もクリーニングしました。 .vsフォルダーも削除しました。おそらく、objフォルダーとbinフォルダーを完全に削除しようとしていたはずです。それは、私がまだやっていなかったことです。

これは私のプロジェクトではありませんでした。通常、私は常に同じ名前のファイルを持つファイルに値コンバーターを構築します。私はそれが問題になるとは思いませんが、そもそも全体のエラーは少しクレイジーでした。

0
Kevin Sherrill

同様の問題がありました。私にとってそれを修正したのは、参照として追加されたプロジェクトのビルドプロパティを変更することでした。 「プラットフォームターゲット」は過去に変更されていたことが判明しました。 「任意のCPU」に設定して再構築すると、エラーが解決しました。

0
karstenp