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

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

ITC_Phantom

Добрый день. У меня возникла такая проблема: я создал приложение на VB и создал к нему установочный файл при помощи Setup Wizard. На компьютере на котором я компилировал стоит framework 1.1, на нём всё устанавливается и работает нормально. А на другом стоит framework 2.0, на нём моё приложение не устанавливается , пишет что ему надо framework 1.1. В чем проблема, они обратно несовместимы ?
 
Совместимы, но старый Setup Wizard не знает про существование .net 2.0 и про его совместимость :). Сделай setup в 2005-й студии, или включай dotnetfxredist_x86.msm в состав установки.
 
Ок. Спасибо. Попробую включить dotnetfxredist_x86.msm
 
Кто сказал про совместимость?
Не удастся запустить приложение, разработанное на платформе .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.
 
Можно сделать финт, попробовав законфигурить ссылки на up-to-date сборки в конфиге, но это уж очень радикально, проще действительно перекомпилить под .NET 2.0.
 
<!--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 или совместимой с ней".
 
Всё. Забрал свои слова обратно по поводу совместимости.
 
На самом деле хватает своих граблей, нигде не описанных. Так что совместимость больше теоретическая.
 
Как я понял самым лучшим выходом будет поставить 2005 Visual Studio ?
 
Лучшего выхода нет ;) можно:
1. Распространять вместе со своим приложением нужную версию фрэймворка (dotnetfxredist_x86.msm)
2. Поставить 2005-ю студию и считать что у всех есть хотя-бы 2-й .net.
3. Создавать инсталл в чем-нибудь другом, более терпимом к версии фрэймворка. Или распространять в виде zip-архива.
 
Насколько мне помнится. В Installer проекте 2003 студии можно отключить проверку версии .NET Framework и не включать дистрибутив .NET.
 
Пожалуй остановлюсь на втором варианте, мне он кажется наиболее приемлимым.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab