Совместимось Framework'ов

Тема в разделе ".NET", создана пользователем ITC_Phantom, 26 дек 2006.

Статус темы:
Закрыта.
  1. ITC_Phantom

    ITC_Phantom Гость

    Добрый день. У меня возникла такая проблема: я создал приложение на VB и создал к нему установочный файл при помощи Setup Wizard. На компьютере на котором я компилировал стоит framework 1.1, на нём всё устанавливается и работает нормально. А на другом стоит framework 2.0, на нём моё приложение не устанавливается , пишет что ему надо framework 1.1. В чем проблема, они обратно несовместимы ?
     
  2. Pasha

    Pasha Гость

    Совместимы, но старый Setup Wizard не знает про существование .net 2.0 и про его совместимость :). Сделай setup в 2005-й студии, или включай dotnetfxredist_x86.msm в состав установки.
     
  3. ITC_Phantom

    ITC_Phantom Гость

    Ок. Спасибо. Попробую включить dotnetfxredist_x86.msm
     
  4. karlito

    karlito Гость

    Кто сказал про совместимость?
    Не удастся запустить приложение, разработанное на платформе .NET Framework v1.1, на машине, где данная версия .NET не стоит. И не важно, что там более старшие версии лежат.

    Как идентифицируются сборки?
    Четырьмя параметрами.
    System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

    Как сборки ссылаются друг на друга?
    При помощи таких идетификаторов сборки.

    И если хоть один параметр не совпадает, то CLR не будет загружать такую сборку. По крайней мере CLR версии 1.0, 1.1, 2.0 так делают. Microsoft обещала в следующей версии CLR сделать поддержку подгрузки сборки с наибольшей версией.
    Все сборки из FCL версии .NET 1.1 содержат у себя в идетификаторе сборки версию (дай бог памяти) 1.1.4322.5000.
    Все сборки версии 2.0 содержат версию 2.0.0.0.

    Сакраментальный вопрос.
    Так будет ли данная программа работать, если сборок на которые она ссылается нет в системе?
    Ответ?
    Будет (Пока дело не дойдёт до кода, который вызывает код из сборки, которой нет). Но так как mscorlib.dll и System.dll содержат основные типы для любой программы, то всё упадёт сразу. Но при отстутствии исполняемой среды нужной версии даже до этого не дойдёт. А версию CLR содержит у себя в описании каждая сборка.

    Посыл из выше сказанного простой.
    Либо перекомпилий свой проект под новую версию .NET. Либо клиент должен иметь дополнительно старую версию .NET.
     
  5. Dr.Gigabit

    Dr.Gigabit Гость

    Можно сделать финт, попробовав законфигурить ссылки на up-to-date сборки в конфиге, но это уж очень радикально, проще действительно перекомпилить под .NET 2.0.
     
  6. Pasha

    Pasha Гость

    <!--QuoteBegin-karlito+27:12:2006, 23:29 -->
    <span class="vbquote">(karlito @ 27:12:2006, 23:29 )</span><!--QuoteEBegin-->Кто сказал про совместимость?
    Не удастся запустить приложение, разработанное на платформе .NET Framework v1.1, на машине, где данная версия .NET не стоит. И не важно, что там более старшие версии лежат.
    [snapback]51966" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    А ты когда-нибудь пробовал это сделать? Или просто так утверждаешь? А как же мега-механизм биндинга, которым вполне можно подменить любую сборку для приложения?
    Приложения, скомпилированные для 1.0, запускаются без перекомпиляции на машинах с 1.1; .NET 2.0 тоже обратно совместим с 1.1. Более того, в конфиге приложения можно явно указать версии рантайма (сразу несколько), которые оно поддерживает, или версию, которою оно будет явно требовать.

    Вот, неплохая статья на эту тему: http://www.gotdotnet.com/team/changeinfo/

    А у ITC_Phantom проблема не в совместимости фрэймворков. А в том, что его инсталлер тупо проверят наличие на машине именно версии 1.1, на не "1.1 или совместимой с ней".
     
  7. karlito

    karlito Гость

    Всё. Забрал свои слова обратно по поводу совместимости.
     
  8. Pasha

    Pasha Гость

    На самом деле хватает своих граблей, нигде не описанных. Так что совместимость больше теоретическая.
     
  9. ITC_Phantom

    ITC_Phantom Гость

    Как я понял самым лучшим выходом будет поставить 2005 Visual Studio ?
     
  10. Pasha

    Pasha Гость

    Лучшего выхода нет ;) можно:
    1. Распространять вместе со своим приложением нужную версию фрэймворка (dotnetfxredist_x86.msm)
    2. Поставить 2005-ю студию и считать что у всех есть хотя-бы 2-й .net.
    3. Создавать инсталл в чем-нибудь другом, более терпимом к версии фрэймворка. Или распространять в виде zip-архива.
     
  11. karlito

    karlito Гость

    Насколько мне помнится. В Installer проекте 2003 студии можно отключить проверку версии .NET Framework и не включать дистрибутив .NET.
     
  12. ITC_Phantom

    ITC_Phantom Гость

    Пожалуй остановлюсь на втором варианте, мне он кажется наиболее приемлимым.
     
Статус темы:
Закрыта.

Поделиться этой страницей