2011-09-15 3 views
0

は、私は2つのプロジェクトとVisual Studioのソリューションがあります。アンマネージドDLL依存関係はどこに置くべきですか?

  • クラスライブラリMyLib

    • MyLib参照MyAssembly.dll
    • MyAssembly.dllが依存しているmynativedll.dll上の.NETアセンブリではありませんが、ネイティブDLL。私はmynativedll.dllを置くべきWebプロジェクトでは、
  • WebプロジェクトMyWeb

    • MyWeb参照MyAssembly.dll

このdllをbinディレクトリに置くと、クリーニング時にdllが無効になります。

"Lib"フォルダにMyAssembly.dllの横にこのdllを置いて、このフォルダにプロービングパスを追加しても動作しません。実際には、MyAssembly.dllは、 "Copy to local"をtrueに設定していても、binディレクトリにコピーされます(参照用です)。

このようなケースを処理する正しい方法は何ですか?

+0

はmynativedll.dllですか?COM DLL? – JohnFx

+0

いいえ...単純なネイティブdll –

答えて

0

ああ...実際は単純です。

WebプロジェクトでMyAssembly.dllを直接参照しています(コードの観点からする必要はありません)。 次に、Webディレクトリに "localをコピー"をfalseに設定します。

これが問題を解決しました。

MyAssembly.dllはネイティブDLLはまたに常駐libフォルダからbinフォルダにコピーしますが、赤くされていません。

+0

私はあなたの問題を解決するかどうかはわかりません。 '/ bin'フォルダを見ると' .dll'ファイルの古いコピーが見えます。正解はそれらをすべて '/ bin'に置くことです。 –

+1

答えとしてマークしてください;) –

+0

@ Eric:no ... binは手動でdllを置くのには適していません。しかし、あなたは正しいです、私はこれが動作するようにbinフォルダをきれいにしなければなりませんでした。 –

0

あなたが外部DLLIMPORTを使用したネイティブライブラリのメソッドを実装していない理由は、任意の理由を属性:?

[DllImport("advapi32.dll")] 
private static extern int LogonUserA(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); 

[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
private static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken); 

[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
private static extern bool RevertToSelf(); 

[DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
private static extern bool CloseHandle(IntPtr handle); 

DLLIMPORT属性:
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx

エクスターナル修飾子:
http://msdn.microsoft.com/en-us/library/e59b22c5%28v=vs.80%29.aspx

+0

MyAssembly.dllとMyNativeLibrary.dllはともに第三者です...私の問題はDLLの仕組みではなく、DLLが見つかりました –

+0

OSによって提供されるネイティブDLLですか? –

+0

もちろんです!それが問題ではない –

関連する問題