Assembly.Load странное поведение

У меня есть «Microsoft.Web.Services2.dll» V2.0.3.0 в моем GAC из двух машин.

Я использую эту строку в обоих из них:

Assembly.Load("Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");

(обратите внимание, что версия 2.0.0.0, а не 2.0.3.0)

На одной машине это не удается (как я и ожидал). В другом работает и загружается dll 2.0.3.0. На самом деле на этой машине работает (и загружает 3) любая версия ниже 3.

Как вы можете это объяснить?


person Yaron Naveh    schedule 30.12.2009    source источник


Ответы (3)


Возможно, у вас есть Microsoft.Web.Services2.dll в папке bin. Проверьте расположение сборки:

var assembly = Assembly.Load("XXX");
Console.WriteLine(assembly.Location);
person Darin Dimitrov    schedule 30.12.2009
comment
Так чему же соответствует свойство Location после загрузки сборки? - person Darin Dimitrov; 30.12.2009
comment
Независимо от версии (при условии, что она ‹ 3) я получаю C:\Windows\assembly\GAC\Microsoft.Web.Services2\2.0.3.0__31bf3856ad364e35\Microsoft.Web.Services2.dll - person Yaron Naveh; 30.12.2009

Это может быть связано с загрузкой флага «Определенная версия». Если вы проверите свойства сборки в папке «Ссылки» в Visual Studio, она покажет свойство «Конкретная версия», которое, я думаю, указывает, следует ли ссылаться на конкретную версию сборки или нет (по умолчанию — false). По умолчанию он будет ссылаться на любую конкретную ИЛИ более новую версию сборки, и я думаю, что здесь происходит.

Таким образом, в самом методе загрузки может быть некоторая опция, которая указывает, следует ли загружать ТОЛЬКО конкретную версию или вернуться к более поздней версии, если конкретная не найдена.

person A9S6    schedule 30.12.2009
comment
На сборку вообще не ссылаются - я загружаю ее из GAC. Вот что странно... - person Yaron Naveh; 30.12.2009