2012-01-17 17 views
1

Visual Studio 2008とCompact Framework 3.5を使用してWindows CEアプリケーションを開発しています。コンパクトフレームワーク - 依存関係(dll)をサブフォルダに配置

これで、必要なdllファイルをメインのexeファイルのサブフォルダに配置します。それは可能ですか? This solutionはWindows CEでは機能しません。

編集:

私は依存関係がクライアントデバイス上のサブフォルダに住みたいです。

現在、私のフォルダ構造は、私が何をしたい、この(単一のディレクトリ内のすべて)

-- folder\ 
------ main.exe 
------ controls.dll 
------ webservice.dll 
------ businesslogig.dll 
------ nlog.dll 

次のようになります。

-- folder\ 
------ main.exe 
------ lib\ 
--------- controls.dll 
--------- webservice.dll 
--------- businesslogic.dll 
--------- nlog.dll 

これはapp.configをで設定してデスクトップ上で可能ですファイル:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="lib" /> 
    </assemblyBinding> 
    </runtime> 
+0

dev環境またはターゲットデバイスのサブフォルダに追加しますか? – ctacke

+0

対象(私は自分の質問を更新しました)。 –

+0

アプリケーションのルートディレクトリ以外の参照されるアセンブリには、厳密な名前が必要です。 - MSDN(http://msdn.microsoft.com/en-us/library/15hyw9x3.aspx) – leppie

答えて

3

コンパクトなフレームワークは、プロービング設定をサポートしていません。

最善の解決策は、多分それはexeファイルの検索パスにDLLを追加することですが、この質問は、私がこれまでに見つかった唯一の良いリソースですapp.configファイルのパス。あなたが回避策として試すことができるいくつかのことがあります。

私が最初に推測したのは、システムローダーの検索パスにサブフォルダを追加することですが、管理されたアセンブリとして実際に試したことはわかりません。ローダパスを拡張するには、パスをMULTI_SZレジストリキーの別の文字列([HKLM\Loader\SystemPath])に追加するだけです。 OSに変更を反映させるためにソフトリセットが必要なのかどうかもわかりません。 WM_SETTINGSCHANGEブロードキャストも試してみる価値があります。

管理対象アセンブリの2つ目のオプションは、アセンブリからアセンブリを手動でロードして、ターゲットからクラスを使用する前にロードすることです。ロードするにはAssembly.LoadFromにコールし、その時点でCLRがロードできます。

ネイティブDLLの2番目のオプションは、DLLのP/Invokeをターゲットへの完全なパスで呼び出すことです。最初のP/Invokeによってロードされた後は、LoadLibraryで検索された内部ハンドルを使用するだけで、(パスがなくても)DLL名へのそれ以上の呼び出しは適切に解決されます。

+0

私はあきらめてdllを同じフォルダに配置しました。しかし、Assembly.LoadFrom(...)は良いサウンドです。たぶん次のリファクタリング中に私はそれを試みます。 –

1

必要なDLLをどこにでも置くことができるはずですt。

明らかに、プロジェクトのフォルダ構造内に配置することは当然です。

プロジェクトのフォルダ構造におけるDLLへの参照を追加するには、単に右クリック参照セクションを参照してを追加を選択することができるはずです。

スクリーンショットでは、SQLite.Interop.066.DLLがダイアログボックスに表示されます。それが私のプロジェクトに追加された方法でした。

これが役に立ちます。

screenshot

+0

-1:質問に関連するものは表示されません。 – leppie

0

あなたは、「参照の追加」ダイアログで直接それを行うことはできません。 exeファイルは、dllが実行可能ファイルの同じパスにあることを期待しているか、または登録されている必要があります(そして、私はこの方法がうまくいかないか分かりません)。参照ダイアログを追加すると、それらのdllはそのパスにのみコピーされます。

私は唯一のアイデアはダイナミックDLLの発見です(後で、Mefを参照してください)が、私はコンパクトなフレームワーク3.5と知りません。 How to save DLLs in a different folder when compiling in Visual Studio?

関連する問題