Почему разные версии сборок Silverlight имеют одинаковый номер версии? - PullRequest
12 голосов
/ 14 декабря 2010

Почему разные версии сборок Silverlight имеют одинаковый номер версии?

Location: ...\Silverlight\v3.0\System.Core.dll 
Name: System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 

Location: ...\Silverlight\v4.0\System.Core.dll 
Name: System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 

Location: ...\Silverlight\v4.0\Profile\WindowsPhone\System.Core.dll 
Name: System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 

В то время как стандартный .net имеет разные номера версий

Location: ...\Framework\v4.0.30319\System.dll 
Name: System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 

Location: ...\Framework\v2.0.50727\System.dll 
Name: System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 

Ответы [ 5 ]

3 голосов
/ 21 декабря 2010

В .NET для подписанной (.snk) сборки самой первой причиной, по которой вы не изменили бы номер версии сборки, является обеспечение того, что строгое имя сборки останется прежним. Таким образом, не связываясь с файлами .config или пользовательскими политиками, любой клиент, созданный со ссылкой на вашу сборку, все равно сможет загружаться без жалоб.

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

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

Именно по этой причине разработчики в большинстве случаев предпочитают сохранять одну и ту же версию ... всегда, когда это возможно, и это верно как для CoreCLR (CLR Silverlight), так и для. NET CLR.

Однако в случае .NET CLR тот факт, что они изменили версию, на самом деле создает некоторые проблемы для существующих приложений .NET. Иногда существующие приложения .NET 2 необходимо добавить это в файл .config в контексте .NET 4:

<configuration>
  <startup>
    <supportedRuntime version="v4.0.30319" />
  </startup>
</configuration>

Вы можете взглянуть на эту статью, в которой объясняется, насколько сложным может быть все это за кадром: Совместимость версий в .NET Framework

2 голосов
/ 18 декабря 2010

То же самое произошло с библиотеками базовых классов (например, System.dll) для настольных версий .NET 2.0, 2.0SP1, 2.0SP2, 3.0, 3.0SP1, 3.5 и 3.5SP1, все они имеют одинаковые[AssemblyVersion], 2.0.0.0.Только в .NET 4.0 эта версия была увеличена до 4.0.0.0

Версия сборки представляет собой public интерфейс сборки.Сильное изменение в элементах типов, доступных другим сборкам, требует нового [AssemblyVersion].Обязательно, потому что для этого требуется перекомпиляция клиентского кода, использующего эти типы.Я проверил версии System.Core.dll, которые вы упомянули.Немного мучительного удара через экспортный вывод Reflector для сборки.Много изменений в частных и внутренних классах и методах.Но не общедоступные, те же типы и методы.

Не совсем верно, и это также произошло в настольной версии, класс StrongBox приобрел конструктор по умолчанию в версии 4.0.Возможно, спасение в том, что конструктор задокументирован как «Этот API поддерживает инфраструктуру .NET Framework и не предназначен для использования непосредственно из вашего кода».И именно в Silverlight приложение, предназначенное для 4.0, никогда не увидит версию 3.0 этого класса случайно, в отличие от настольного компьютера.

2 голосов
/ 14 декабря 2010

Ничто не мешает платформе Silverlight 4 использовать версию System.Core 2.0.5.0..NET 3.5 Framework поставляется с версией 2.0 System.Web.Однако платформа .NET 4 поставляется с более новой версией System.Core.

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

Может быть, они не хотят, чтобы разработчик перекомпилировал приложение Silverlight для другой версии Sliverlight Framework ...

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

Я думаю, что команда разработчиков забыла изменить номера версий и не имела контрольного списка, но я не уверен на 100%. Нет механизма, который автоматизирует эту задачу, нет центрального компилятора. Каждый пользователь в этой группе разработчиков может скомпилировать эту сборку кода, если у него есть строгое имя с маркером открытого ключа. Меня интересует полный ответ эксперта на эту тему.

...