Невозможно выполнить Assembly.Load (String) со ссылкой на сборку, если я сначала не создаю экземпляр класса в этой сборке. Как решить? - PullRequest
0 голосов
/ 31 декабря 2010

У меня здесь очень странная проблема. Похоже, если я не создаю экземпляр класса в сборке, я получаю ошибку "сборка не найдена".

Например:

Assembly.Load("something.blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

Type mqType = Type.GetType(query.Attribute(fullyQualifiedName + ", " + assemblyInfo);
Object mq = Activator.CreateInstance(mqType);

Выдает исключение FileNotFound в Assembly.Load

Это:

Assembly.Load("something.blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

new someClassInAssembly();

Type mqType = Type.GetType(query.Attribute(fullyQualifiedName + ", " + assemblyInfo);
Object mq = Activator.CreateInstance(mqType);

Работает нормально. Да, даже если он создается после Assembly.Load, поэтому это явно проблема во время компиляции. Как явно убедиться, что сборка загружена и доступна во время выполнения, есть ли где-нибудь настройка компиляции, что мне нужно сделать?

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

Честно говоря, если это всего лишь одна ссылка или горстка, просто добавьте явную ссылку куда-нибудь, это сэкономит вам много усилий.

//Use a static constructor somewhere appropriate. 
static someClass(){
   new AssemblyYouCareAbout.Object();
}

Альтернативы - это перетаскивание библиотек вручную в корзину вашего запущенного процесса или добавление библиотек в gac. Я бы предпочел использовать не очень элегантный статический конструктор и двигаться дальше.

0 голосов
/ 31 декабря 2010

Убедитесь, что вы загружаете сборку, которую, как вы думаете, загружаете, указав путь:

AssemblyName an = AssemblyName.GetAssemblyName(filePath);
Assembly.Load(an);
...