Дело за или против .NET (зверя) [закрыто]


92

Компания, в которой я работаю, использует C ++ Builder 6. Мы разрабатываем собственный код с момента зачатия. Наш флагманский продукт полностью написан на нативном коде.

Входит в .NET Framework со своими наворотами. Я падаю, крюк, леска и грузило. Я убеждаю руководство, что .NET должна стать нашей новой структурой для разработки всего нового программного обеспечения и что мы должны как можно скорее начать миграцию существующей кодовой строки. При всех преимуществах этого не нужно много убеждать. Мое предложение они принимают как обычно.

На этом этапе я начинаю разработку своего самого первого .NET-приложения. Все идет по плану. Проект - это только одна составляющая нашего продукта. Итак, я подошел к созданию установщика для этого нового компонента. Как компания, мы гордимся тем, что делаем вещи для пользователя максимально простыми. Даже Microsoft с тысячами разработчиков не создает установщиков, как мы. Например, при установке Microsoft CRM вы получите только список сбоев и предварительных условий, которые необходимо установить, прежде чем вы сможете продолжить. Не нам. Никогда. Если вам что-то нужно, мы вам это установим.

Это делает наши установки такими простыми. .NET Framework не установлен? Нет проблем! Мы сделаем это за вас. Нужен собственный клиент SQL? Отлично!

Проблема в том, что теперь, когда один компонент нашего решения написан на .NET, это невероятно усложняет процесс установки. Прежде чем я смогу даже приступить к установке нашего продукта, мне нужно сделать следующее:

  • Определите, установлен ли предварительный компонент

  • Установите, если это не так

  • Убедитесь, что он был успешно установлен

  • Следующее предварительное условие

Для установки .NET Framework мне сначала понадобится установщик Windows 4.5. Но есть разные версии для разных ОС, поэтому я добавляю определение ОС и запускаю правильный EXE. О, .NET framework уже упакован с 2k8, и установщик exe не может работать на нем, вам нужно запустить OCSetup.exe с параметрами для его установки.

И так продолжается. Затем необходимо установить SQL Express 2005. Зависимости снова увеличиваются.

Я спорю с руководством, что даже Microsoft не упрощает задачу для пользователя. Их ответ состоит в том, что у нас нет причин не быть лучше их в этом отношении. Я не могу с этим спорить, за исключением того, что чувствую, что есть очень веские причины, по которым они выбрали свой подход.

Внезапно наш установщик стал огромным. Все предварительные требования для .NET, даже не говоря о поддержке 64-битной версии, которая требует установки целого ряда EXE-файлов. Итак, теперь мы подошли к тому моменту, когда мы хотим, чтобы пользователи могли загрузить «быструю» оценку. Ну и шутка. Вам необходимо загрузить 500 МБ, чтобы запустить приложение 30 МБ. Большая часть установочного пакета требует предварительных условий.

Руководство считает, что у нас слишком много зависимостей / предпосылок. Я полностью понимаю. Они предлагают нам отойти от .NET framework, вернуться на родину, где все еще было «легко» с точки зрения установки. Именно здесь одна часть меня хочет встать на защиту .NET, объясняя преимущества в целом, улучшенный опыт разработки, более легкое обслуживание и общее качество кода. Другая часть меня полностью с ними согласна! Для разработки в .NET просто требуется установить слишком много других предварительных условий, что усложняет установку.

Да, некоторые сторонники .NET будут утверждать, что все должно устанавливаться в исправленной и обновленной операционной системе. Это правда, но не у всех клиентов это есть, и просто сказать «Извините, сначала обновите» ничего не выйдет. Помните, мы гордимся общим пользовательским интерфейсом.

Сейчас мы снова рассматриваем возможность написания нативного кода, и я знаю, что мы теряем с точки зрения скорости разработки и всех преимуществ .NET. Но мы выигрываем в этой области, будь она небольшая, если смотреть на картину в целом или нет. Поскольку у нас есть навыки разработки нативного кода, а .NET - фактически новая область для нас, имеет смысл даже вернуться.

У меня такой вопрос: каково мнение вашей компании по этому поводу, если это вообще проблема, и как будет выглядеть бизнес-модель, которую я предлагаю руководству, если я хочу продолжить миграцию всех наших продуктов на .NET?


23
+1 за прекрасный рассказ.
— jgauffin

25
Нет ли программ-заглушек для .net, которые загружают компоненты по мере необходимости? Объединение полных установщиков подходит для выпуска DVD, но если они загрузили пробную версию, вы можете реально предположить, что они подключены к онлайн-установке .net.
— Rup

4
По иронии судьбы, в некоторых книгах по .NET, которые я изучил во время учебы в колледже, развертывание XCOPY упоминается как одно из его основных преимуществ :)
— Мадхур Ахуджа

25
Вы забыли указать свою зависимость от Windows. Это еще пара гигабайт. Используйте бутстраперы.
— Ханс Пассан

13
Интересная история, которую следует озаглавить: «Как НЕ изменить способ ведения бизнеса всей вашей компании, если вы прочитали некоторые маркетинговые материалы и до того, как узнали, что вам действительно нужно делать, чтобы правильно использовать новую структуру»
— Эндрю Барбер,

Ответы:


50

Это причина того, почему многие компании перешли на веб-установщики, которые загружают все необходимые компоненты на лету с вашей домашней страницы. Поскольку в большинстве случаев в ОС есть 99% того, что нужно (если они были обновлены с помощью Центра обновления Windows).

Я бы не стал ставить все для x64 и x32 в один установщик. Создайте два установщика, по одному для каждой архитектуры.


2
Я не верю, что вы можете поместить установочные пакеты x64 и x86 в одну базу данных MSI.
— Дэвид Хеффернан

Правда. Я только что ответил наSuddenly, our installer is massive. All the prerequisites for .NET, not even talking about 64 bit support which has a whole seperate range of EXEs to install
— jgauffin

6
ЛЮБОЕ программное обеспечение требует отдельных установщиков x86 и x64! Ныть ..
— Абатищев

4
Абатищев: Если бы программное обеспечение было просто двоичным файлом .NET, скомпилированным для архитектуры «Any», не было бы необходимости в отдельной установке x86 и x64. Отдельные установщики нужны только тогда, когда вам нужно установить саму платформу .NET.
— Гейб

Если вы пишете веб-установщик, пожалуйста, помните о людях, которые живут за прокси. Даже Microsoft часто забывает о людях, живущих за их собственным ISA (я смотрю на вас, установщик Web Developer).
— Егор Павлихин

39

Paint.NET прекрасно обертывает установку необходимых компонентов, не связывая с ним .NET framework по умолчанию. Конечным результатом является неуправляемый исполняемый файл оболочки, который проверяет .NET framework и некоторые другие вещи и держит вас за руку при установке; все скачивается на лету по мере необходимости. Затем они запускают приложение WinForms, которое pInvokes в MSI, чтобы в дальнейшем завернуть установку в вату.

Стоит гугл.

Также вероятен тот факт, что на многих клиентских машинах уже будет установлена ​​какая-либо версия .NET Framework, поскольку она является частью Microsoft Update, что упрощает ее использование в деловом мире.

Сообщения в блоге Paint.NET об установке:

http://blog.getpaint.net/2008/08/24/the-paintnet-install-experience-part-1-version-3xx/

http://blog.getpaint.net/2008/08/25/the-paintnet-install-experience-part-2-version-40/ (спасибо, Руп!)

Если углубиться в историю, предположим, что менеджменту пришлось хотя бы один раз пройти через боль развертывания с приложением C ++, но теперь это сделано и классифицируется как «легко». Потратьте немного времени на развертывание и представьте это руководству и, скрывая боль, покажите им, как легко установить :)


Спасибо за ссылку. Вторая часть - это blog.getpaint.net/2008/08/25/… (я не видел ссылку с первой на странице, хотя на самом деле она есть в заголовках)
— Rup

@Rup хорошая находка! Я бегло посмотрел и не заметил этого. Я исправлю свой ответ, чтобы показать это.
— Адам Хулдсворт

Интересно, есть ли установщик с открытым исходным кодом, похожий на версию 4.0 для Paint.net. Это было бы чрезвычайно полезно для всех, кто распространяет приложения .net.
— dbkk

1
@dbkk ты мне говоришь! Paint.NET использовался для выпуска кода программы и установщика, но с тех пор он был отредактирован из-за того, что программы copy-cat не указывали автора.
— Адам Хулдсворт

1
Если вы установите / обновите Paint.NET при открытой Visual Studio, это может повредить Visual Studio. Поэтому я бы сказал, что их установщику еще нужно поработать.
— Грег

37

Вернемся к тому, почему вы в первую очередь захотели перейти с нативного кода на код .NET: это более эффективно для вас, как программиста. В .NET многие вещи проще, чем в C ++ (или другом родном языке, который вы используете), поэтому вы можете разрабатывать свои приложения намного быстрее.

Тогда как соотносится время, потраченное на разработку приложения, со временем, затрачиваемым на разработку установщика? Даже если вам придется потратить пару недель на разработку установщика (в частности, части настройки фреймворка), это будет более или менее единственным разом, когда вам придется пройти через это.

Для всех будущих приложений вы будете использовать почти идентичный установщик; вы все равно будете выполнять все проверки предварительных требований, но вместо того, чтобы копировать файлы в C: \ Foo, вы копируете некоторые другие файлы в C: \ bar.

На мой взгляд, это простой вопрос экономики. Да, разработать (хороший / полный) установщик для .NET-приложения дороже, но если это шаг, который вам нужно сделать один раз, чтобы значительно сократить время разработки, это не проблема. Ваш возврат инвестиций, вероятно, составит порядка нескольких недель.


1
+1 Трудно определить хороший опыт установки в .NET, но, как вы говорите, он должен быть одноразовым. Преимущество наличия большинства шаблонных вещей, которые вам когда-либо понадобятся в качестве System.Something.Class away, почти бесценно и стоит одной или двух головных болей, вызванных установщиком.
— Адам Хоулдсворт

2
Я с нетерпением жду выхода Wix Burn , первого на тот момент загрузчика, который действительно работает (надеюсь). DotNetInstaller вместе с NSIS - это то, что я сейчас использую. Но эта обработка UAC еще далека от совершенства.
— Уве Кейм

1
@Uwe Похоже, что Wix Burn выйдет примерно в то же время, что и Duke Nukem Forever .
— dbkk

Это было бы прекрасно. Я уже видел превью скриншотов Duke Nukem Forever . Так что это скоро должно быть там ;-)
— Уве Кейм

17

Я чувствую, что должен ответить на это заявление:

Да, некоторые сторонники .NET будут утверждать, что все должно устанавливаться в исправленной и обновленной операционной системе. Это правда, но не у всех клиентов это есть, и просто сказать «Извините, сначала обновите» ничего не выйдет. Помните, мы гордимся общим пользовательским интерфейсом.

Если ваш пользователь настаивает на том, чтобы выстрелить себе в ногу, используя систему , о которой поставщик сообщил ему, что она больше не подходит для данной цели , то вы ничего не можете сделать, чтобы «помочь» ему. Я понимаю, что из-за этого я выгляжу как неприятный активист, но я смотрю на это так же, как и ремесленник: покупатель должен убедиться, что среда, в которой он хочет, чтобы я работал, была звук и подходящий для продукта. Если это не так, я приму дополнительное вознаграждение за выполнение этой работы, но это все равно может потребовать от них дополнительной работы, потому что у них не было предвидения, чтобы убедиться, что они понимают, что они покупают.

Я считаю, что клиентам программного обеспечения было позволено оставаться в неведении достаточно долго, и что теперь от них следует требовать понимания того, что они покупают. Эксплуатация корпоративной ИТ-среды, которая не исправлена ​​должным образом, равносильна продолжению эксплуатации автомобиля, который был отозван производителем - пакет обновления Windows во многих отношениях эквивалентен отзыву. По закону вы не обязаны подавать заявку на отзыв, но это в ваших интересах как бизнеса, и вы можете нести ответственность за ущерб, причиненный уклонением от ответственности.


2
Я бы сказал, что отзыв производителя немного преувеличен с точки зрения аналогии - я бы сказал, это больше похоже на вождение автомобиля, в котором раньше не было подушек безопасности или АБС - появились новые функции, улучшающие качество и повышающие панель качества. Старые вещи не становятся внезапно сломанными или опасными, теперь они просто считаются ниже планки сегодняшних стандартов. Я уверен, что команда Windows 95 возразит, что в то время они думали, что планка была довольно высокой! :-) Тем не менее я согласен с вами, незнание прогрессии качества не является достоинством.
— Адам Хоулдсворт

11
Я не согласен на 100%. Потребители слишком долго должны были быть слишком осведомленными. Зачем мне знать, x86 я или x64? Почему я должен знать, какой у меня пакет обновления? Позвольте мне купить ваше программное обеспечение, и вы выясните, что должно произойти, чтобы оно заработало. Потребительское программное обеспечение неумолимо движется к модели iOS / Android / AppStore, и любой разработчик, который требует от пользователей знания чего-либо, кроме самых основных деталей об их устройстве, останется позади.
— Куби

1
@kubi, конечно, аналогия с iOS исходит из предположения, что оборудование не меняется, потому что оно контролируется производителем. ПК полностью настраиваются, поэтому требуются некоторые знания или осведомленность о требованиях - или, по крайней мере, требуется осознание необходимости иметь кого-то, кто знает, что они делают. Я либо знаю размер своих шин, либо отдаю свою машину тому, кто знает, собираюсь ли я менять шины.
— Адам Хулдсворт

3
@kubi: Я согласен с вами в отношении модели случайного пользователя - разница в том, что у пользователя нет причин не делегировать все технические вопросы, такие как версия платформы, либо i) производителю, либо ii) мне как разработчику. Поэтому они не проблема. Пользователь, который представляет собой проблему, - это корпоративный пользователь, который не обязательно имеет право голоса по поводу своей конфигурации и которому необходимо заплатить компетентному ИТ-провайдеру для решения этих проблем.
— Tom W

4
Пользователи не обращают внимания на наши аргументы, какими бы убедительными они ни были. Они хотят использовать ваше программное обеспечение ... но могут отказаться, если установка окажется слишком сложной. Им все равно, кто виноват - Microsoft, производители или они сами.
— dbkk

7

Любое приложение Visual C ++ также имеет предварительные требования / внешние зависимости: среда выполнения 6.0, 2003, 2005, 2008 или 2010? нет SP, SP1 или SP2? x86 или x64? Какая версия установщика Windows требует 2005 SP2? А какой 2008 SP1? И так далее, так далее.

Итак, это надуманные аргументы! Как ворчание Джоэла по поводу .NET. И посмотрите, что сейчас !


3
+1 за ссылку на сайт Джоэла
— Security Hound

-1 за ссылку на сайт Джоэлса.
— Phill

Вы можете статически ссылаться на среду выполнения, поэтому вам не нужны эти зависимости.
— Тони Эджкомб

1
@Tony: Статическая связь в 10-х годах 21 века? Абсолютный моветон ;)
— абатищев 05

+1 за ссылку на веб-сайт Джоэла
— Shahid M Zubair

3

Я не понимаю, насколько больше предварительных требований для .net по сравнению с C ++ Builder. Вы жалуетесь на SQL Server, но игнорируете тот факт, что вам также нужно установить некоторую базу данных с помощью C ++ Builder. Вы жалуетесь на x64 и x32, но .NET не требует никаких изменений ... один и тот же exe работает на обоих (и оптимально компилируется для любой среды). Чего нельзя сказать о C ++ Builder. Вам могут понадобиться отдельные версии SQL-сервера, но опять же, это применимо к построителю C ++ (если вы просто не установите x32 на все).

Да, есть проблемы с новой версией установщика, но эти компоненты не очень большие. И вы действительно можете заставить установщики загружать и устанавливать только необходимые APRT.

Построитель C ++, вероятно, вам проще, потому что вы уже потратили время на создание хорошего установщика. Вам нужно сделать то же самое для .NET, и тогда вы сможете выбирать, исходя из реальных проблем ... а не этого.

Кстати, причина, по которой Microsoft предпочитает делать то, что они делают, заключается в том, что многие пользователи, особенно корпоративные, не хотят, чтобы для них что-то устанавливали автоматически (возможно, потому, что у них есть приложение, которое зависит от конкретной версии библиотеки, а вы приходите и стираете его новой версией, которую они не могут легко удалить).

То, что вы считаете «облегчением» для менее осведомленных людей, на самом деле НАМНОГО усложняет задачу тем, кто знает, что они делают.

Вот хороший пример. Одна вещь, которую я абсолютно презираю, - это когда я устанавливаю приложение, которому нужен SQL Server, и оно устанавливает свой собственный экземпляр SQL Server, даже если у меня уже есть несколько экземпляров, которые оно могло бы использовать. Для новичка это просто, головная боль для меня - пытаться заставить ваше приложение работать с моим единственным экземпляром.


1

Если ваше приложение работает под Mono, то доставка вашего приложения со средой выполнения Mono может быть менее болезненной.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.