2009-07-31 15 views
7

外部DLLを参照するC#を使用してコンソールアプリケーションを作成しました。私はdevのマシンでそれを実行すると、すべて正常に動作します。プロダクションマシンでは、「タイプ初期化」エラーが発生します。これを見ると、参照されたDLLが見つからないことがあるようです。.NETコンソールアプリケーションは、参照されているアセンブリをどのように探すのですか?

私の開発ボックスで、参照されているDLLはGACにありますが、プロダクションではありません。 devボックスのGACからDLLを削除すると、同じエラーが発生します(デバッグモードでローカルのVisual Studioビルドから実行しない限り)。

私はWebサイトの設定に精通しており、DLLをbinディレクトリまたはGACに配置して、Webアプリケーションで見つけることができることを知っています。しかし、私はコンソールアプリケーションのためにこれがどのように機能するかについてはわかりません。

私はDLLをGACの生産ボックスに置くことを嫌っています。これはこの小さなアプリケーションに必要なだけです。コンソールアプリケーションを配備し、必要なアセンブリを見つけられるようにするための他の方法はありますか?ここで

は私が取得してい例外です:

エラー1型または名前空間名「エントリを」が見つかりませんでした(あなたが usingディレクティブまたはアセンブリ参照が不足している?)C:\ドキュメントと Settings \のVisual Studioの\マイドキュメント\ハッカー 2005プロジェクト\基本的な\基本的な\ Program.csを10 8基本

答えて

11

\最も簡単な答えは、コンソールアプリケーションと同じディレクトリにDLLのを置くことで、それはそれらを見つけるでしょう。

CLRが参照アセンブリを検索する方法と場所に影響する多くの要素があるため、答えがかなり複雑です。私はMSDNの次の記事を見てみることをお勧めします。

0

あなたが得る(とあなたが内部例外に飛び込む必要があるかもしれません)例外を調べるときは、すべての場所のログ(「融合ログ」)を検索表示されるはずです。

コンソールアプリケーションと同じディレクトリに依存DLLを置くことをお勧めします。

+0

実際には、彼は 'ex.ToString()'を表示するだけです。 –

2

GAC(Global Assembly Cache)は.dllファイルを登録しているため、アプリケーションの作業ディレクトリに置く必要はありません。 .NETの.dll(System.IO.dll、System.dllなど)はすべてGACを介して登録されています。つまり、アプリケーションのディレクトリに登録する必要はありません。デフォルトでは、.dllがGACに登録されていない場合、プログラムは自身のディレクトリ内で見つからない.dllを探します。

だから、あなたは3つの選択肢があります:GACにあなたの参照の.dllの追加、または

  • はあなたの参照を追加

    1. を。DLLのアプリケーションの作業ディレクトリに「CopyLocal = true」を設定し、その参照のためのソリューション/プロジェクトの参照やプロパティを選択、へ
    2. ゴー(このため上記のParthaにクレジット)
  • 3

     
    - Right click on the assembly name in your project reference. 
    - select Properties 
    - In the properties window set CopyLocal to true 
    

    +0

    ああ、私の答えで言及するのを忘れてしまった。 :P +1 – Zack

    0

    必要に応じて、参照先のDLLを展開できます。 基本プロジェクトにApp.config(追加/新規項目/アプリケーション構成ファイル)を追加し、タグ探索(構成/実行時/アセンブリ結合/プロービング)を使用してdllのパスを指定する必要があります。

    dllまたはdllをそのパスにコピーし、プロジェクトに参照を追加する必要があります。参照プロパティでは、 "copy local"を "false"にします。

    関連する問題