Вопрос по версиям .net framework
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 25.11.16 02:22
Оценка:
Коллеги, подскажите, вот правильно ли я понимаю, что для запуска софта, написанного с использованием .net 4.5 (версия, выбранная в свойствах проекта), на компьютере тоже должен быть установлен .net 4.5? Или там есть какая-то возможность использовать 4.5 для сборки, но сделать сборку бинарно-совместимой с 4.0?

Есть кое-какой десктопный софт, в данный момент все исходники собираются под .net 4.0 Хочется переползти хотя бы на 4.5, но есть опасения, что у нас могут быть пользователи с Windows XP, а для XP 4.5 не доступен.
С уважением, Artem Korneev.
Re: Вопрос по версиям .net framework
От: Doc Россия http://andrey.moveax.ru
Дата: 25.11.16 03:26
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

AK>Коллеги, подскажите, вот правильно ли я понимаю, что для запуска софта, написанного с использованием .net 4.5 (версия, выбранная в свойствах проекта), на компьютере тоже должен быть установлен .net 4.5?


Да.

AK>Или там есть какая-то возможность использовать 4.5 для сборки, но сделать сборку бинарно-совместимой с 4.0?


Это как вы себе это представляете? Напишу код под 4.5, а запускаться он будет под 4.0? Если у вас нет необходимости в фичах 4.5 спокойно пишите на 4.0.
Re: Вопрос по версиям .net framework
От: vorona  
Дата: 25.11.16 04:27
Оценка: 2 (1) +1
Здравствуйте, Artem Korneev, Вы писали

quirking
Отредактировано 25.11.2016 4:28 vorona . Предыдущая версия .
Re: Вопрос по версиям .net framework
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.11.16 07:38
Оценка: 2 (1)
Здравствуйте, Artem Korneev, Вы писали:

AK>Коллеги, подскажите, вот правильно ли я понимаю, что для запуска софта, написанного с использованием .net 4.5 (версия, выбранная в свойствах проекта), на компьютере тоже должен быть установлен .net 4.5?


Да.

AK> Или там есть какая-то возможность использовать 4.5 для сборки, но сделать сборку бинарно-совместимой с 4.0?


Есть. Указать в свойствах проекта 4.0.

AK>Есть кое-какой десктопный софт, в данный момент все исходники собираются под .net 4.0 Хочется переползти хотя бы на 4.5, но есть опасения, что у нас могут быть пользователи с Windows XP, а для XP 4.5 не доступен.


Собирайте под оба фреймворка на сервере CI. Недостающие в 4.0 фичи 4.5 обычно можно сравнительно легко сэмулировать. См., к примеру, https://github.com/rsdn/CodeJam — там даже под 3.5 версия есть, хоть и в несколько урезанном виде, но в свойствах проектов указан 4.5.2.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Вопрос по версиям .net framework
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 01.12.16 03:22
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Это как вы себе это представляете? Напишу код под 4.5, а запускаться он будет под 4.0?


Ну да. А почему нет?
Более новые версии компилятора вполне могут использовать уже существующие возможности виртуальной машины дотнета. Не знаю, как там сейчас дела, но вроде бы Java довольно долго поддерживала обратную совместимость с виртуальной машиной. Код, собранный новыми компиляторами был обратно совместим со старыми версиями JRE.

Doc> Если у вас нет необходимости в фичах 4.5 спокойно пишите на 4.0.


Ну это как бы очевидно. Вопрос был о том, насколько болезненным будет переход с 4.0 на 4.5 в плане обратной совместимости с десктопными операционками у пользователей.
С уважением, Artem Korneev.
Re[3]: Вопрос по версиям .net framework
От: Doc Россия http://andrey.moveax.ru
Дата: 01.12.16 04:54
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

Doc>>Это как вы себе это представляете? Напишу код под 4.5, а запускаться он будет под 4.0?

AK>Ну да. А почему нет?

А что будет, когда произодет обращение к коду .NET появившемуся в 4.5?
Re[3]: Вопрос по версиям .net framework
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.12.16 08:59
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

AK>Более новые версии компилятора вполне могут использовать уже существующие возможности виртуальной машины дотнета.


А чтобы не использовать то, что не существует в более старых версиях рантайма как раз и предназначен выбор версии рантайма в свойствах проекта.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: Вопрос по версиям .net framework
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 16.12.16 03:07
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>А что будет, когда произодет обращение к коду .NET появившемуся в 4.5?


А такого не было бы в принципе. Я ж написал:

AK>> Более новые версии компилятора вполне могут использовать уже существующие возможности виртуальной машины дотнета.


Т.е. результат компилляции был бы полностью совместим, например, с рантаймом 4.0
В некоторых языках такая возможность есть — Java, как я уже говорил, вроде бы это поддерживает. JavaScript через дополнительные костыли — тоже. Но как мне тут уже ответили, в дотнете такого нет. А жаль. Ничего принципиально невозможного в этом нет, это можно реализовать кучей разных способов, но тут наверное решение чисто политическое — дотнет обновляется для всех поддерживаемых версий Windows, а неподдерживаемые, видимо, хотят побыстрее утилизировать чтоб перевести пользователей на новые версии.
С уважением, Artem Korneev.
Отредактировано 16.12.2016 3:08 Artem Korneev . Предыдущая версия .
Re[5]: Вопрос по версиям .net framework
От: Doc Россия http://andrey.moveax.ru
Дата: 16.12.16 05:16
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

Doc>>А что будет, когда произодет обращение к коду .NET появившемуся в 4.5?

AK>А такого не было бы в принципе.

Тогда я не понимаю в чем профит от сборки 4.0 кода как 4.5. Поясните?
Re[6]: Вопрос по версиям .net framework
От: Sinix  
Дата: 16.12.16 05:51
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Тогда я не понимаю в чем профит от сборки 4.0 кода как 4.5. Поясните?


Два варианта:
1. Зависимые нюгет-пакеты бинарно несовместимы. Например, в версии под 4.5 в качестве параметра используется тип из фреймворка, в 4.0 такого типа нет, в сборку добавлена копия типа, но type forwarding не настроен. Тут надо пинать авторов, если никак — разные сборки под разные целевые платформы. На практике такое встречается крайне редко.

2. Речь не про отдельную сборку, а про приложение. Тогда см вот эту ссылку, @vorona выше приводил.
Re[7]: Вопрос по версиям .net framework
От: Doc Россия http://andrey.moveax.ru
Дата: 17.12.16 08:43
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>2. Речь не про отдельную сборку, а про приложение. Тогда см вот эту ссылку, @vorona выше приводил.


Если с первым ясно, то вот какой бенефит в (2)? Учитывая что по ссылке вообще сказано

Some compatibility best practices covered in this article include:
Don’t re-target existing projects to newer .NET Framework versions unless necessary. This will minimize compatibility issues by allowing the app to take advantage of compatibility quirks.

или я что-то все же упустил?
Re[8]: Вопрос по версиям .net framework
От: Sinix  
Дата: 17.12.16 08:52
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Если с первым ясно, то вот какой бенефит в (2)? Учитывая что по ссылке вообще сказано

Doc>или я что-то все же упустил?
Да не, всё верно. Профит может быть, если проект решено развивать дальше или что из зависимостей требуется обновить. Иначе смысла нет.
Re[6]: Вопрос по версиям .net framework
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 18.12.16 07:07
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Тогда я не понимаю в чем профит от сборки 4.0 кода как 4.5. Поясните?


Всё наоборот, я хотел проект на 4.5 сделать совместимым с 4.0, чтоб можно было запускать на вин ХР.
А причина простая. Есть проект, писанный на 4.0 Проект живой, развивается, пару месяцев назад наняли меня чтоб двигать всё это дело в облако. Я начал с внедрения Dependency Injection. Т.к. Unity (DI контейнер) требует .net 4.5 и выше, то и возник этот вопрос — можно ли оставить проект совместимым с 4.0
Независимо от этого, начальство решило что пришла пора обновляться до 4.6, так что вопрос сам по себе разрешился. Иначе пришлось бы брать другой DI контейнер, совместимый с 4.0
С уважением, Artem Korneev.
Отредактировано 18.12.2016 7:17 Artem Korneev . Предыдущая версия .
Re[7]: Вопрос по версиям .net framework
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.12.16 11:29
Оценка: +1
Здравствуйте, Artem Korneev, Вы писали:

AK>Т.к. Unity (DI контейнер) требует .net 4.5 и выше, то и возник этот вопрос — можно ли оставить проект совместимым с 4.0


С этого инадо было начинать, а не ребусы загадывать. Если он его требует, значит с очень большой вероятностью он использует фичи 4.5, а значит на 4.0 работать не будет. Используй версию 2.1, она на FW35 работает. Ну либо можно скачать исходники и посмотреть, можно ли его быстро сбекпортить на 4.0.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[8]: Вопрос по версиям .net framework
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 19.12.16 18:28
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK> Используй версию 2.1, она на FW35 работает. Ну либо можно скачать исходники и посмотреть, можно ли его быстро сбекпортить на 4.0.


Ну я ж говорю, вопрос уже разрешился — шеф сказал, что все наши пользователи, как минимум, на Windows 7, а значит, можно использовать .net 4.6
Если б всё-таки понадобилось бы поддерживать XP и .net 4.0, то я просто взял бы другой DI-контейнер — вроде, StructureMap это поддерживает и ещё какие-то контейнеры. Нет большой нужды возиться со старыми версиями Unity или портировать что-то самому.
С уважением, Artem Korneev.
Re[9]: Вопрос по версиям .net framework
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.16 18:52
Оценка: +2
Здравствуйте, Artem Korneev, Вы писали:

AK>Нет большой нужды возиться со старыми версиями Unity или портировать что-то самому.


Я бы сказал, что нет большой нужды вообще возиться с DI контейнерами, кроме ряда особых случаев.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[10]: Вопрос по версиям .net framework
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 19.12.16 19:20
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Я бы сказал, что нет большой нужды вообще возиться с DI контейнерами, кроме ряда особых случаев.


Почему? Удобно же.
С уважением, Artem Korneev.
Re[11]: Вопрос по версиям .net framework
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.16 19:42
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

AK>Почему? Удобно же.


Чем? Тем что проверки компилятора заменяются рантайм проверками и здравствуй отладка?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[12]: Вопрос по версиям .net framework
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 19.12.16 20:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AK>>Почему? Удобно же.

AVK>Чем? Тем что проверки компилятора заменяются рантайм проверками и здравствуй отладка?

Что и где заменяется?
Строгая типизация никуда не пропадает, да и вообще никак не соотносится с Dependency Injection.
DI работает через интерфейсы. Интерфейсы, в целом, вообще удобная штука сама по себе и полезна даже без DI. Когда класс реализует интерфейс, то компилятор делает все нужные проверки, никаких отличий от варианта без интерфейсов тут нет.
Единственное, что неудобно — когда в Visual Studio переходишь на реализацию метода, оно прыгает в определение интерфейса, а не в класс с реализацией.
С уважением, Artem Korneev.
Re[13]: Вопрос по версиям .net framework
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.16 20:21
Оценка: +2
Здравствуйте, Artem Korneev, Вы писали:

AK>Строгая типизация никуда не пропадает, да и вообще никак не соотносится с Dependency Injection.


Еще как соотносится. И механизм injection, и service locator, и регистрация реализаций — все это происходит в рантайме и проверено может быть только в рантайме, не смотря на наличие интерфейсов. Если оно так нужно вне зависимости от применения DI — ок, вопросов нет. Но чаще я вижу другое — никакой runtime магии до использования DI не было, несколько реализаций интерфейса в одно место не уперлись, все жестко связывалось компилятором.
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.