2012-02-20 8 views
-1

外の負荷の参照は、私はC#のプログラムを作るためのVisual Studioを使用しています。私はロードしているサードパーティのDLLを持っています。それは動作しますが、私はそれをコンパイルディレクトリのサブディレクトリに入れたいと思います。 (リリースの代わりにリリース\ lib \)。私はexe.configファイルを使ってこれを行うことができますが、ユーザーがプログラムがDLLを探す場所を変更することはできません。では、exe.configを使用せずにサブディレクトリ内のDLLをどのように参照するのですか?のVisual Studio - コンパイルフォルダ

+0

は、現在の参照を削除して、リファレンスに行く..フォルダにコピーします。 - >追加と.dllが今置か場所に移動します..ここで質問です。..あなたがアプリケーションを展開するとき..あなたはローカルマシンに置いている場所に基づいてターゲットマシン上にフォルダを作ろうとしていますか、あるいはcopy local = true ..を設定しようとしていますか?ターゲットマシンに移植している場合は、GACの使用について考えましたか? – MethodMan

+0

私はすでにそれを試しました...それは出力ディレクトリにコピーするか、それをオフにすると実行時にエラーが発生します。ターゲットマシン上では、exeを含むbinフォルダー、dllを含むlibフォルダーを持ちます。他のものもありますが、それは今は重要ではありません。また、GACを使うことができると言った記事を見たことがありますが、それは非常に悪い考えでした。それがなければそれを行うことができれば、それは良いでしょう。 – Aidan

答えて

0

私はあなたのドメインのAppDomainSetup.PrivateBinPathプロパティの設定が必要になると思います。 参照アセンブリがあるフォルダパス(複数の場合は ";"で区切られます)をこのプロパティで指定します。このようにして、指定されたディレクトリに必要な参照を検索するために、アセンブリへの署名を行います。

注意し、このプロパティは唯一のサブディレクトリOのbinパスしているディレクトリのために動作しますが、それはあなたのケースを正確に思われること。

EDIT

例:

AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "path1;path2;..."; 

幸運。

+0

さて、これは私の必要としているようですが、どこに置くのですか?申し訳ありませんが、私はこの種のものでは良くありません。 Main()関数の先頭にある私のProgram.csにAppDomainSetupを置いています。appdomainsetup = new AppDomainSetup(); \t \t \t appdomainsetup.PrivateBinPath = "\\ libに\\";その変数はどのように使用しますか? – Aidan

+0

@エイダン:私の編集したコメントをチェックアウト – Tigran

+0

それは動作しません:/。それが変更された直後に変更された値を印刷してみましたが、何も出ていませんでした。つまり、その変数を更新していないということです。私はあなたがしなければならないことは、新しいドメインを作成してそれを設定することだと思います。私は今それをする方法を理解しようとしています.... – Aidan

0

DLLをロードするために開始する前に、PrivateBinPathを指定することが重要です。

static class Program 
{ 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "path"; 
     Application.Run(new Form1()); 
    } 
} 

そして、アプリケーションフォルダ内のdllは、我々は、指定PrivateBinPathフォルダ内の別のDLLを必要とする場合、それは動作しません。すべてのDLLが同じフォルダにある必要があります...