2010-11-26 2 views
1

У меня есть приложение, которое использует (ссылается) библиотеку классов (myLib.dll частная сборка).Различают две одинаковые частные сборки

Я создал новый проект библиотеки классов с точно таким же кодом библиотеки первого класса.

Когда я кладу в папку приложение, а вторая dll выдает исключение, когда я запускаю его.

Как приложение отличает две сборки, так как они не имеют сильного имени?

это приложение

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

это код каждой библиотеки

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

Это отображается в junt в времени Debuger. («произошло необработанное исключение»)

+2

В чем исключение? И вы можете уточнить, что именно заставляет его, я не понимаю вашего описания. – Oded 2010-11-26 13:59:34

ответ

0

Если сборка отсутствует в GAC, CLR будет искать каталоги в пулах зондирования для исполняемого файла с тем же отображаемым именем. Который когда-либо находит, затем проверяется на остальные атрибуты сборки, AssemblyVersion, Culture и PublicKeyToken. Исключение составляет несоответствие с эталонной сборкой. Я бы предположил, что несоответствие версии сборки, поскольку культура обычно *, а токен открытого ключа равен нулю.

Конечно, сообщение об исключении даст вам лучшую диагностику, чем мой ответ.

0

Абонементы не могут быть подписаны, но у них все еще есть свои собственные идентификаторы GUID. Ассембли в первую очередь определяются их идентификаторами GUID в GAC, а не их именами файлов.

Пространства имен разные. Если у вас есть обе сборки, упомянутые в вашем проекте, и они имеют общее пространство имен, то компилятор будет генерировать исключение неоднозначности, поскольку он не может определить, какую сборку вы пытаетесь использовать.

+0

Что вы пытаетесь сделать? Получите что-то, чтобы использовать скопированную сборку вместо исходной сборки? Вы пытаетесь ввести свою собственную логику? Кроме того, что я имел в виду под «общим пространством имен», это то, что они являются пространствами имен одинаковыми. У вас не должно быть двух сборок с тем же пространством имен и именем класса. Если вы настаиваете на этом, вам нужно будет пометить свой класс как частичный класс в BOTH-сборках. – bitxwise 2010-11-26 23:13:15

+0

Я просто хотел проверить, как ссылается сборка. – 2010-11-27 07:10:13

Смежные вопросы