2012-01-13 7 views
1

私は3つのプロジェクト(c#)を持つソリューションを作成しています。ソリューション内の他のプロジェクトで参照されているdllクラスライブラリの場所を設定します

  1. メイン実行可能なプロジェクト
  2. Dllファイル
  3. Dllファイル

メインプロジェクトは、他の人への参照を持っています。

main.exe 
Libraries - folder 
    + 2.dll 
    + 3.dll 

しかし残念ながらVSは、EXEの場所にそれらのDLLファイルを入れている: は、私は私のメインのプロジェクト内のファイルの構造を次のようにしたいです。

これを実行する簡単な解決策がありますか?

答えて

2

子DLLの出力パスをライブラリを指すように変更できます。

しかし、これは.NetがDLL解決のために実行時にプローブする標準的なパスではないため、これらの場所から手動でロードしない限り、展開しようとすると問題が発生する可能性があります。

プロジェクト参照がローカルコピーに設定されている場合、Visual Studioがファイルを構成経由でコピーするディレクトリを変更することはできません。

ただし、各ビルド後に自動的にファイルを目的のサブディレクトリに移動するビルド後のコマンドをセットアップできます。

更新

それは、毎日新しいことを学ぶために私を可能にしますので、私はこのサイトが大好きです。場合によっては、標準プロービングパスにパスを追加するために、設定ファイルに追加できるprobing elementが見つかりました。

この構成要素を使用すると、librariesフォルダのDLLが読み込まれるため、.NetはそのDLLが読み込まれた後に追加作業を行う必要がなくなります(ポストビルドを使用してそのディレクトリに移動する必要があります)コマンド)。ここで

は、コンフィギュレーションをサポートするためのサンプルconfigエントリです:

<configuration> 
    <runtime> 
     <assemblyBinding> 
     <probing privatePath="bin\libraries"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
+0

はい私はそれを知っていますが、あなたが意味するこのパスを変更したくありません。それらのdllファイルのコピーが2つあります。彼らはプロジェクトのディレクトリにあり、VSは私が変更したい場所のメインプロジェクトでそれらをコンパイルしています。 – nosbor

+0

@nosbor - なぜですか?正しい場所はアプリケーション自体です。 2つのコピーがある唯一の理由は、Visual Studioのためです。インストーラソリューションをセットアップしてプログラムをインストールした場合、それぞれの単一のコピーが作成されます。指摘したように、あなたが望むものは標準的な動作ではありません。つまり、手作業でファイルをロードする必要があり、それらを参照するためのVisual Studioではありません。あなたが2つのコピーを持っている唯一の理由は、同じコンピュータ上にあなたのソリューションを構築することです。あなたがこれを変更したい理由は、ちょうど愚かです。 –

+0

通常の動作とVs iは現在通常どおり動作しません。見て...すべてのod dllプロジェクトは、自分の/ bin/Debugディレクトリにdllコンパイルされたアセンブリを持っています。さらに、それらのアセンブリをメインのプロジェクト/ bin/Debugフォルダにコピーしています。そして、私は/ bin/Debug/Librariesに変更したいです。 – nosbor

1

私は同じ問題を持っていますが、前の例が働いていません。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="Libraries"/> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+0

+1「assemblyBinding」の規定のどれも私にとってうまくいかないことが判明したので、これを早く見つけたと思う。 – vossad01

関連する問題