Аннотация:
При проектировании платформы .NET одной из задач являлось легкое развёртывание (инсталляция) и поддержка приложений, так как в настоящее время эта проблема стала серьезно беспокоить не только разработчиков, но и рядовых пользователей. Наверное, каждый знаком с ситуацией, когда после установки новой программы некоторые старые приложения наотрез отказывались работать. Ниже я вам поведаю о том, какое решение данной проблемы предоставила Microsoft на этот раз.
Здравствуйте, der Igel, Вы писали:
DI>Hello, MNZ!
M>> Интересная, подробная статья. Обо всём в одном месте. Только некоторые M>> запятые стоят не на своих местах
DI>А там вверху, в левом угле, кнопочка такая есть — Орфо.
Дык, Орфографию оно проверяет. А запятые -- это пунктуация.
К тому же, проблемы написания слитно-раздельно, тоже надо учитывать.
Цитирую:
Если быть до конца честным, то мы конечно же не вызвали данную функцию, на прямую.
Hello, Spaider!
DI>> А там вверху, в левом угле, кнопочка такая есть — Орфо.
S> Дык, Орфографию оно проверяет. А запятые -- это пунктуация. S> К тому же, проблемы написания слитно-раздельно, тоже надо S> учитывать.
И орфографию, и пунктуацию посетители проверяют, а не конопочка.
Ты выдели кусок, напиши комментарий, как надо — мы и исправим.
А кнопочка помогает в коммуникации.
Хотелось бы уточнить про версионность сборок в GAC
Я тут провел смелые научные эксперименты и получил следующие результаты:
Я проверид это утверждение
Информация о версии приложения разбита на две части вовсе не случайно. При поиске необходимой сборки, политика требует точного совпадения лишь основной версии сборки. А дополнительная версия используется для поиска наиболее свежей сборки. То есть будет загружена сборка с наибольшими номерами построения и ревизии.
Не зависимо от того какая часть версии сборки меняется меняется, если не находится сборка в GAC с точным соотвесвием версии, то выдается ошибка, что не найдена сборка, что очень печально.
Проверялось это под Framework 1.1
1. Утверждение верно для сборок с нестрогими именами. Для ссылок на сборки со строгим именем (а только такие и могут лежать в ГАКе) требуется полное совпадение полного имени сборки.
2. В общем-то ты и сам можешь загрузить нужную сборку, если стандартный загрузчик не нашел, подцепившись на соответствующее событие домена
iT>1. Утверждение верно для сборок с нестрогими именами. Для ссылок на сборки со строгим именем (а только такие и могут лежать в ГАКе) требуется полное совпадение полного имени сборки.
iT>2. В общем-то ты и сам можешь загрузить нужную сборку, если стандартный загрузчик не нашел, подцепившись на соответствующее событие домена
И что делать? Я же не знаю, какая версия последняя. Кроме того не всегда удобно подцепиться на событие домена, так как я могу работать под COM+ или WEBом
В>И что делать? Я же не знаю, какая версия последняя. Кроме того не всегда удобно подцепиться на событие домена, так как я могу работать под COM+ или WEBом
Давай тогда рассказывай, что за задача в целом — может какие-то другие решения есть?
Здравствуйте, Igor Trofimov, Вы писали:
В>>И что делать? Я же не знаю, какая версия последняя. Кроме того не всегда удобно подцепиться на событие домена, так как я могу работать под COM+ или WEBом
iT>Давай тогда рассказывай, что за задача в целом — может какие-то другие решения есть?
Да задача то простая
Есть несколько подсистем, которые как то между собой взаимодействуют. Версии подсистем меняются часто( раз в неделю точно ).
Соотвесвенно после переустановки подсистемы приходтся конфигураить сборки, что бы старые версии других подсистем могли нормально подцеплять новые версии сборок. И это при установке может занимать значительное время. Соотвесвенно нужно решение, которое позволит сократить это время или вообще избавится от конфигурации сборок.
В>что бы старые версии других подсистем могли нормально подцеплять новые версии сборок. И это при установке может занимать значительное время. Соотвесвенно нужно решение, которое позволит сократить это время или вообще избавится от конфигурации сборок.
Так там по-моему можно просто сказать: для поиска любых сборок "MyAsm, 1.1.*, PublicKey=ABCDEF01234" использовать последнюю имеющуюся версию. Или нет такого в MSDN?
Здравствуйте, mihailik, Вы писали:
В>>что бы старые версии других подсистем могли нормально подцеплять новые версии сборок. И это при установке может занимать значительное время. Соотвесвенно нужно решение, которое позволит сократить это время или вообще избавится от конфигурации сборок.
M>Так там по-моему можно просто сказать: для поиска любых сборок "MyAsm, 1.1.*, PublicKey=ABCDEF01234" использовать последнюю имеющуюся версию. Или нет такого в MSDN?
В>Соотвесвенно после переустановки подсистемы приходтся конфигураить сборки, что бы старые версии других подсистем могли нормально подцеплять новые версии сборок.
Тут вот какая штука... если меняется интерфейс взаимодействия подсистем и этот интерфейс описан в этих самых сборках — то сам бог велел все-таки их пересобрать, чтобы удостовериться, что они остались совместимы хотя бы на уровне компиляции.
Если же речь идет об изменении реализации при то, что интерфейс остается тем же — тогда можно интерфейсы вынести в отдельные, неизменяемые сборки, а новые реализации загружать динамически, просто прописывая в некий конфиг перечень имен сборок, которые следует загрузить.
Здравствуйте, Igor Trofimov, Вы писали:
iT>Тут вот какая штука... если меняется интерфейс взаимодействия подсистем и этот интерфейс описан в этих самых сборках — то сам бог велел все-таки их пересобрать, чтобы удостовериться, что они остались совместимы хотя бы на уровне компиляции.
iT>Если же речь идет об изменении реализации при то, что интерфейс остается тем же — тогда можно интерфейсы вынести в отдельные, неизменяемые сборки, а новые реализации загружать динамически, просто прописывая в некий конфиг перечень имен сборок, которые следует загрузить.
Речь идет об обратной совместимости. Если меняется интерфейс, то функциональность только добавляется, а существующий интерфейс не меняется. По этому мне было бы логично, что более поздняя версия может использоваться старыми компонентами, они прост о не будут трогать новые функции.
M>>Так там по-моему можно просто сказать: для поиска любых сборок "MyAsm, 1.1.*, PublicKey=ABCDEF01234" использовать последнюю имеющуюся версию. Или нет такого в MSDN?
В>Где там? Можно примерчик?
В myprogram.exe.config — конфигурационном файле. Если такой файл лежит рядом с EXE-шником, то он при запуске прочитывается и учитывается.
Формат в MSDN есть, я наизусть не помню, мутноватый он малость. Ищи bindingRedirect, и посмотри соседние пункты. Как-то так оно называется.