none
言語の混在(C#とC++)のあるVS2003からVS2010への移行による影響範囲 RRS feed

  • 質問

  • はじめまして。

    今回VS2003からVS2010に移行するにあたり以下の問題点がありました。

    ・C#からC++のプロジェクトを参照設定する際に追加できない。

    →エラー内容:参照アセンブリ”C++のプロジェクトの.dll”が見つかりませんでした。このアセンブリが別のプロジェクトによって生成された場合、このプロジェクトをビルドする前に、その生成元のプロジェクトをビルドすることを確認してください。

    C++のdllは作成されているのですが、C#側のプロジェクトに参照設定の追加をしようとすると「dllを指定してください」とメッセージが出て追加できません。VS2008(.Net Framework3.5)に移行した際には問題無く出来た。VS2010(.Net Framework4.0)でC++として変更があったとしたら「.vcproj」から、「.vcxproj」に変更したくらいしかないためそれが原因?と考えています。※.Net Framework3.5→4.0は追加機能しかない認識のため影響がないと考えています。

    このエラーに対する解決策をご存知の方がいらしたらご教示願います。

    【知りたいこと】

    ・言語が混在しているソリューションの中で、C#のプロジェクトにC++のプロジェクトを参照設定に追加する方法。

    ・単純に参照設定の追加をしても追加できない原因。

    以上、宜しくお願い致します。

    2013年11月26日 1:59

すべての返信

  • この質問文からはどのようなメニュー操作をしたのかわかりませんが、参照には2種類あります。ファイルを直接指定する参照と、プロジェクト(の出力)の参照です。

    前者はどのパスであれそこにファイルが存在する前提でビルドが行われます。C++より先にC#のビルドが行われてしまうとファイルが見つからない等のエラーになります。また明示的にパス指定しているので、C#側のビルド構成がDebug / Releaseどちらであっても強制的に指定されたパスにあるDLLを参照することになります。
    対してプロジェクト参照の場合、ビルドに依存関係が設けられ、C++ビルド後にC#のビルドが行われますし、ビルド構成に従った出力ファイルを参照するようになります。

    そこで、質問者さんはきちんとプロジェクト参照を行っているでしょうか?

    2013年11月26日 2:49
  • ※.Net Framework3.5→4.0は追加機能しかない認識のため影響がないと考えています

    その認識は明らかに誤りです。

    .NET Framework 2.0-3.5SP1(3.5.1) は同じ CLR 2.0 系のランタイム・クラスライブラリを使いますが、.NET Framework 4.0-4.5.1 は CLR 4.0 系のランタイム・クラスライブラリを使います。
    このため、「追加機能だけしかない」ではなく、実行基盤が違います。

    さて、この前提を踏まえた上で、古いプロジェクトから移行している現状が気にかかります。
    VS2003 の頃は C++/CLI ではなく、マネージ拡張の C++ でした。その作っているプロジェクトは適切に移行されてきたのでしょうか?
    そして、C++ のプロジェクトの全般にあるツールセットのバージョンはどれを選んでいるのでしょうか?(vc90? vc100?)

    参照設定の追加ではマネージアセンブリとして作られた C++ プロジェクト・ DLL のみ参照できるので、きちんとマネージ DLL として仕上げられているか、移行してきているかが鍵になると思います。
    その辺を説明してもらわないと、第三者には解明できません。
    (原理を把握していない状況で「説明を求められてもできるわけない!」となるかもしれませんが、回答側はそれ以上何も手出しができないのです。。。)

    なお、最初の質問の「C# のプロジェクトに C++ プロジェクトを参照設定に追加する方法」は CLR クラスライブラリで新規に作成すれば、参照設定のプロジェクトタブからかんたんに追加できます。逆に言えば、CLR でないプロジェクトは追加できません。
    こういった状況なので、2 番目の質問はあなたのソースコードに依存するので、そのソースコードを知らない我々には答えられません。

    2013年11月26日 13:51
    モデレータ