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

  • Автор темы ITC_Phantom
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

ITC_Phantom

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

Pasha

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

ITC_Phantom

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

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.
 
D

Dr.Gigabit

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

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. Более того, в конфиге приложения можно явно указать версии рантайма (сразу несколько), которые оно поддерживает, или версию, которою оно будет явно требовать.

Вот, неплохая статья на эту тему:

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

karlito

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

Pasha

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

ITC_Phantom

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

Pasha

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

karlito

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

ITC_Phantom

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!