none
2010では、DLL内でWindow クラス, Canvas クラスが使えなくなった。 RRS feed

  • 質問

  • 開発環境を 2008 から 2010 にしたら、以下の問題が生じてしまいました。

    クラスライブラリ(.dll)で、 Window クラス, Canvas クラスを多用しているのですが、
    以下の4つのコードがすべてエラーになってしまいます。

    ① class MyWindow : Window
       {
       }

    ② Window  mywindow;

    ③  class MyCanvas : Canvas
        {
        }

    ④  Canvas mycanvas;


    いずれも、エラーは、

    『 型 'System.Windows.Markup.IQueryAmbient' が参照されていないアセンブリで定義されています。
      アセンブリ 'System.Xaml, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089' への参照を追加してください。 』

    と表示されます。

    解決方法の御教示をお願い致します。

    ちなみに、私は自分に必要なスタンドアロン・アプリケーションのみを作って使っている初級のアマチュア・プログラマです(プログラム歴は長い)。
    また、XAMLは一切使わず、C#コードのみで開発をしており、C# Express を使用しています。
    (今後もその予定)

    できるだけ、結論的コードと初級用の説明でお願いします。

    2010年4月30日 7:56

回答

  • そもそも、System.Xaml.dll 自体、.NET 4 で初めて用意されたアセンブリのはずです。

    また、using 名前空間; は単に「このソースファイル内では型名を記述するときにこの名前空間を書くのは省略するね」という意味しかありません。本来 System.DBNull a = DBNull.Value; と記述しなければならないのを、DBNull a = DBNull.Value; と書けるようにするだけのことです(using System; とした場合)。アセンブリの参照とは全く関係ありません。名前空間と同じ名前のアセンブリってのも多いですが、実際 DBNull クラスは System.dll ではなく mscorlib.dll で定義されています。

    • 回答としてマーク 山本春海 2010年5月10日 7:35
    2010年4月30日 10:06
  • すいません。自分で解決しました。


    System.Xml は、ソルーションエクスプローラ内のプロジェクトで、参照設定していたのですが、
    System.Xaml については、私は Xaml を一切使わずに開発していますので、
    参照設定しておりませんでした。

    2008までは、それでよかったのですが、
    2010からは Xaml を一切使わない場合でも、
    ソルーションエクスプローラ(プロジェクト)内で、アセンブリ System.Xaml を参照しておかないと、エラーになってしまうということですね。

    ただ、おもしろいことに、

    using System.Xaml;

    のコードは書かなくても、エラーにはならないのですね。

    ・・・・・
    独り相撲を取ってしまいました。
    お騒がせいたしました。

    • 回答としてマーク 西方法界 2010年4月30日 9:52
    2010年4月30日 8:58

すべての返信

  • すいません。自分で解決しました。


    System.Xml は、ソルーションエクスプローラ内のプロジェクトで、参照設定していたのですが、
    System.Xaml については、私は Xaml を一切使わずに開発していますので、
    参照設定しておりませんでした。

    2008までは、それでよかったのですが、
    2010からは Xaml を一切使わない場合でも、
    ソルーションエクスプローラ(プロジェクト)内で、アセンブリ System.Xaml を参照しておかないと、エラーになってしまうということですね。

    ただ、おもしろいことに、

    using System.Xaml;

    のコードは書かなくても、エラーにはならないのですね。

    ・・・・・
    独り相撲を取ってしまいました。
    お騒がせいたしました。

    • 回答としてマーク 西方法界 2010年4月30日 9:52
    2010年4月30日 8:58
  • そもそも、System.Xaml.dll 自体、.NET 4 で初めて用意されたアセンブリのはずです。

    また、using 名前空間; は単に「このソースファイル内では型名を記述するときにこの名前空間を書くのは省略するね」という意味しかありません。本来 System.DBNull a = DBNull.Value; と記述しなければならないのを、DBNull a = DBNull.Value; と書けるようにするだけのことです(using System; とした場合)。アセンブリの参照とは全く関係ありません。名前空間と同じ名前のアセンブリってのも多いですが、実際 DBNull クラスは System.dll ではなく mscorlib.dll で定義されています。

    • 回答としてマーク 山本春海 2010年5月10日 7:35
    2010年4月30日 10:06
  • Hongliang 様

    私の、未熟で不正確な記述を補充して御説明いただき、
    ありがとうございました。
    こういうことなのですね。納得いたしました。

    2010年4月30日 10:31