1

ベンダー提供の .Net アセンブリを使用してカスタム ハードウェアと接続する C# で記述されたアプリケーションがあります。.Net アセンブリは、実行時に別の DLL をロードします。ベンダー提供のアセンブリをプロジェクトに追加できますが、それを実行すると、ベンダー アセンブリは必要な DLL を読み込めないと文句を言います。DLL を bin\Debug および bin\Release フォルダーにコピーすることで、当面はこれを回避できます。

問題は、ある時点でこのアプリケーションをクライアントに配布する必要があり、クライアントにこの DLL が配置されていないことです。ソリューションにそれを要求させる方法がわかりません。「foo.dll への参照を追加できませんでした。ファイルにアクセスできること、および有効なアセンブリまたは COM コンポーネントであることを確認してください。」というエラーが表示されるため、参照として追加できません。

TlbExp を使用して DLL を .Net アセンブリに変換できません。「モジュールにはアセンブリ マニフェストが含まれていると予想されていました」というエラーが表示されます。

「クリック ワンス」でアプリケーションを公開すれば、そこで依存関係を宣言できると思いましたが、これも方法がわかりません。また、ファイル リソースとして追加しようとしましたが、これは役に立たなかったようです。

外部 DLL で機能を呼び出す方法に関連する SO に関する他の質問を見ることができますが、この場合、プロジェクトに DLL をバンドルする方法が必要なだけです。

ありがとう。

4

3 に答える 3

1

属性付きメソッドがアンマネージダイナミックリンクライブラリによって公開されていることを示します(DLL

このDllImportAttribute属性は、アンマネージからエクスポートされた関数を呼び出すために必要な情報を提供しますDLL。最小要件として、エントリポイントを含むDLLの名前を指定する必要があります。

詳細については、こちら をご覧くださいレビューへのリンク

于 2013-03-06T12:24:05.947 に答える
1

byte[]dll をリソースとして追加し、読み込み時にファイルに書き出し、Assembly.Load() 実行時に展開することができます。

AppDomain.AssemblyResolve Event複数のバージョンの場合、アセンブリが解決されることを確認するために を使用する必要がある場合があります。

于 2013-03-06T12:30:04.530 に答える
0

プロジェクト内の dll の両方 (すべて) を参照として追加し、それらを「ローカルにコピー」としてマークすることができます。最初の DLL が特定の場所にある 2 番目の DLL を想定していない限り、これで問題ありません。

于 2013-03-06T12:04:05.383 に答える