2009-06-30 20 views
0

通常、アプリケーションで使用するすべての.dllファイルを.exeファイルと同じ場所に配置する必要があります。私はライブラリを他の専用のフォルダに置いて、私のアプリにどこを探すかをapp.configやそのようなパスで表示するだけです。これはどうすればいいですか?.dllファイルを使用する.exeファイルと区別する方法

+0

私はなぜこれをやっているのですか?理由は、各アプリケーションのこれらのdllを独立して更新することができる場合、多分wcfのWebサービスがより良いソリューションを提供するかもしれませんか?正直、 – Calanus

+0

?私は言われた;)私たちは同じライブラリを使用してアプリケーションを失っていると彼らは1つの場所にそれらを保つためには – agnieszka

答えて

5

app.configの<probing> elementを使用して、依存関係を探す場所を指定できます。私はこれがディスク上の任意の場所ではなく、EXEの場所の下にあるディレクトリでなければならないと信じています。

詳細については、"Locating the assembly through codebases or probing"を参照してください。

+0

私はディスク上ではなく、アプリケーションのディレクトリのサブディレクトリではない – agnieszka

+0

その場合、 1)GACです。 2)Assembly.LoadFrom(手動で行う)。 3)codeBase要素を調べますが、あなたの状況をカバーするかどうかはわかりません。 –

+1

はリンクされたディレクトリで動作しますか?つまり実際には実際のディレクトリへのリンク(ソフトまたはハード)であるサブディレクトリを作成します。これはかなりハッキーですが、もちろん:-) –

0

Reflectionを使用して、指定されたパスからdllをロードし、そこにあるすべてのクラスとメソッドにアクセスできますが、これは大変な作業です。あなたはまた、インテリセンスの利益を失うことになるが、それは可能であるが、以下を参照してください

http://www.codeproject.com/KB/cs/csharpreflection.aspx

2

もGAC考えてみましょう - その目的は、アセンブリを保持することである。)

+0

でもgacはコンピュータに属していますので、そのアプリケーションを使用するすべてのコンピュータ上のコンピュータのgacにアセンブリを置く必要がありますか? – agnieszka

1

を実際にスーツという他のいくつかの方法があります私のニーズは最高です。リフレクション(assebly.loadfrom)を使用することは不愉快で、私のコードには多くの変更が必要になります。しかし、ハンドラをappDomain.AssemblyResolveイベントに追加し、要求されたアセンブリが見つからない場合はその位置を表示することができます。

static void Main() 
     { 
      AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 

     static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
     { 
      return Assembly.LoadFrom("C:\\TestAssembly.dll"); 
     } 
+0

これは実行時にDLLの検索でいくつかのCPU時間を投資するとパフォーマンスの問題につながると思います – Uday

0

GACを使用するか、すべての従属DLLをEXEで配布することをお勧めします。さもなければ、不明瞭なバージョニングバグやアプリケーションが突然動かなくなったり、何もしなくなったりする危険性があります。

また、共有コードがネットワーク共有上にある場合は、おそらく各コンピュータのセキュリティ設定を変更する必要があることを忘れないでください。

よろしくお願いいたします。

+0

以下のコメントを参照してくださいoliver hannapiの答え – agnieszka

関連する問題