2010-11-26 10 views
1

クラスライブラリ(myLib.dllプライベートアセンブリ)を使用(参照)したアプリケーションがあります。同じプライベートアセンブリを区別する

私は最初のクラスライブラリとまったく同じコードで新しいクラスライブラリプロジェクトを作成しました。

フォルダにアプリケーションと2番目のdllを置くと、実行時に例外がスローされます。

2つのアセンブリは厳密な名前ではないため、アプリケーションはどのように区別しますか?

これは、これはそれが時間debugerにがjuntが表示されます各ライブラリ

namespace mYnameSpace 
{ 
    public class Class1 
    { 
    public void test1() 
    { 
     Console.WriteLine("hello"); 
    } 
    } 
} 

のコードでアプリケーション

class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      mYnameSpace.Class1 c = new mYnameSpace.Class1(); 
      c.test1(); 
      Console.ReadLine(); 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine(ex); 
     } 
    } 
} 

です。 ( "未処理の例外が発生しました")

+2

例外は何ですか?そして、それが何を引き起こすのかを明確にすることができますか?私はあなたの説明を理解していません。 – Oded

答えて

0

アセンブリがGACにない場合、CLRはプロービングパス内のディレクトリで同じ表示名の実行可能ファイルを検索します。今まで見つかったアセンブリの属性のうち、AssemblyVersion、CultureおよびPublicKeyTokenの残りのアセンブリ属性がチェックされます。参照アセンブリとの不一致が例外を生成します。私は文化が通常*で公開鍵トークンがnullなので、アセンブリバージョンの不一致を推測します。

もちろん、例外メッセージは私の答えよりも優れた診断を提供します。

+0

2つのddlsの違いを知ることはできません(最初のもののみが参照されています)。例外は、 "ファイルまたはアセンブリ 'class1、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null'またはその依存関係の1つをロードできませんでした配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しません(HRESULT: 0x80131040) " –

+0

元の参照アセンブリのバージョンは何ですか? Fuslogvw.exeは、探しているものと見つかったものを表示できます。 –

+0

アセンブリ名が異なっていました(ビジュアルスタジオのプロパティメニュー)。 –

0

アセンブリには署名はないかもしれませんが、依然として独自のGUIDがあります。アセンブリは、主にGACのGUIDで識別され、ファイル名では識別されません。

名前空間が異なります。両方のアセンブリがプロジェクトで参照されていて、共通の名前空間を共有している場合、使用しようとしているアセンブリを特定できないため、コンパイラはあいまいな例外をスローします。

+0

あなたは何をしようとしていますか?元のアセンブリの代わりにコピーしたアセンブリを使用するための何かを入手しますか?あなた自身のロジックを注入しようとしていますか? また、「共通の名前空間を共有する」とは、名前空間が同じであるということです。同じ名前空間とクラス名を持つ2つのアセンブリを持つべきではありません。そうすることを強くお勧めする場合は、両方のアセンブリでクラスを部分クラスとしてマークする必要があります。 – bitxwise

+0

アセンブリを参照する方法をテストしたかっただけです。 –

関連する問題