1

いくつかのネイティブ コード コントロールをラップするマネージド C++ でカスタム UserControl を作成しました。実行時にコントロールが機能することを確認し、デザイナー ツールボックスからコントロールをドラッグ アンド ドロップできるようにすることで、Visual Studio デザイナーでコントロールを機能させようとしています。

UserControl をツールボックスに正常に追加しましたが、コントロールを Windows フォームにドラッグしても何も起こりません。この問題を調査するために、2 つ目の Visual Studio 2008 インスタンスを開き、そのデバッガーを、UserControl を使用しようとしている devenv.exe インスタンスにアタッチしました。UserControl を Windows フォームにドロップした後、Visual Studio デバッガーは、UserControl を含むモジュールを読み込もうとすると、mscorlib.dll に FileNotFoundException を出力します。

デザイナーがプロジェクトの出力パスから dll をロードするのではなく、%UserData%\VisualStudio\9.0\ProjectAssemblies\ RandomFolderNameフォルダーにアセンブリのコピーを作成することに気付きました。ただし、モジュールの依存関係はコピーされません。これが FileNotFoundException の原因であると私は信じています。

この問題を解決する方法はありますか? dll を ProjectAssemblies フォルダーにコピーするときに、Vistual Studio がすべてのアセンブリの依存関係をコピーするのが理想的ですが、これを実現する方法がわかりません。

4

3 に答える 3

1

Visual Studioは、管理されていない依存関係を認識しません。dllを自分でコピーするか、windows\system32ディレクトリにコピーする必要があります。

これに対処するための他の2つの戦略。

  1. このアセンブリを別のアセンブリでラップし、assembly.loadfromを使用して混合dllを手動でロードします。この関数は、混合モードdllの正しいロードディレクトリを設定します。

  2. 混合アセンブリでは、loadlibraryを使用してネイティブ依存関係dllをロードします。この方法で、パスを指定できます。

于 2008-11-18T03:34:08.250 に答える
1

古いスレッドですが、問題に遭遇したばかりで、プロセス中にこの質問を見つけたので、同様の問題に私のソリューションを提出してください。コントロールをラップしているので、型にアクセスするだけの私の修正ほど簡単ではないかもしれません。

基本的に、ラッパー C++/CLI ライブラリにネイティブ DLL を遅延ロードするようにしました。ラッパーの C++/CLI 部分には、Visual Studio とフレームワークで使用されるインターフェイス仕様が含まれているため、ネイティブ DLL が必要になることもロードされることもありません。この質問でも詳細を回答しました: https://stackoverflow.com/a/15481687/34440

于 2013-03-18T16:25:54.693 に答える
0

ファイルにアクセスするコントロールのコンストラクターには何も入れないようにしてください。必要に応じて、DesignTime プロパティが問題のある行をスキップするのに役立つことがあります。

于 2008-11-18T09:22:40.107 に答える