Сборка. Странное поведение

У меня есть "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).

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

3 ответа

Решение

Maybe you have Microsoft.Web.Services2.dll в вашем bin папка. Check the assembly location:

var assembly = Assembly.Load("XXX");
Console.WriteLine(assembly.Location);

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

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

Другие вопросы по тегам