.NET (짐승)에 대한 또는 반대 사례 [종료 됨]


92

제가 일하는 회사는 C ++ Builder 6을 사용하고 있습니다. 우리는 개념부터 네이티브 코드를 개발해 왔습니다. 우리의 주력 제품은 완전히 네이티브 코드로 작성되었습니다.

종소리와 휘파람으로 .NET Framework에 들어갑니다. 나는 넘어지고, 훅, 라인과 싱커. 저는 .NET이 모든 새로운 소프트웨어 개발을위한 새로운 프레임 워크가되어야하며 기존 코드 라인을 최대한 빨리 마이그레이션해야한다고 경영진을 설득합니다. 모든 이점으로 인해 많은 설득력이 필요하지 않습니다. 그들은 평소처럼 내 제안을 받아들입니다.

이 시점에서 저는 첫 번째 .NET 애플리케이션 개발을 시작합니다. 모든 것이 계획대로 진행되고 있습니다. 이 프로젝트는 우리 제품의 한 구성 요소 일뿐입니다. 그래서 저는이 새로운 구성 요소에 대한 설치 프로그램을 만드는 시점에 도달했습니다. 회사로서 우리는 사용자를 위해 가능한 한 쉽게 일을 만드는 것에 자부심을 느낍니다. 수천 명의 개발자가있는 Microsoft조차도 우리처럼 설치 프로그램을 만들지 않습니다. 예를 들어 Microsoft CRM을 설치하면 계속하기 전에 설치해야하는 오류 및 필수 구성 요소 목록 만 받게됩니다. 우리가 아닙니다. 못. 필요한 것이 있으면 설치해드립니다.

이것은 우리의 설치를 매우 쉽게 만듭니다. .NET Framework가 설치되어 있지 않습니까? 문제 없어요! 우리는 당신을 위해 그것을 할 것입니다. SQL 네이티브 클라이언트가 필요하십니까? 좋아!

문제는 솔루션의 단일 구성 요소가 .NET으로 작성 되었기 때문에 설치 프로세스를 엄청나게 복잡하게 만든다는 것입니다. 제품을 설치하기 전에 다음을 수행해야합니다.

  • 필수 구성 요소가 설치되었는지 감지

  • 그렇지 않은 경우 설치

  • 성공적으로 설치되었는지 확인

  • 다음 전제 조건

.NET Framework를 설치하려면 먼저 Windows Installer 4.5가 필요합니다. 그러나 OS마다 다른 버전이 있으므로 OS 감지를 추가하고 올바른 EXE를 시작합니다. 오, .NET 프레임 워크는 이미 2k8로 패키지되어 있으며 설치 프로그램 exe를 실행할 수 없습니다. 설치하려면 매개 변수와 함께 OCSetup.exe를 실행해야합니다.

그리고 그것은 계속됩니다. 그런 다음 SQL Express 2005를 설치해야합니다. 종속성이 다시 한 번 증가합니다.

나는 마이크로 소프트조차도 사용자를 위해 이렇게 쉽게 만들지 않는다고 경영진과 주장한다. 그들의 반응은 우리가 이런 식으로 그들보다 나아지지 않을 이유가 없다는 것입니다. 나는 그들이 그들의 접근 방식을 따라 간 아주 좋은 이유가 있다고 생각한다는 것을 제외하고는 그것에 대해 논쟁 할 수 없습니다.

갑자기 설치 프로그램이 엄청납니다. .NET의 모든 전제 조건은 설치해야 할 EXE의 전체 범위를 포함하는 64 비트 지원에 대해서도 언급하지 않습니다. 이제 사용자가 "빠른"평가판을 다운로드 할 수있는 지점에 도달했습니다. 좋은 농담 이었어. 30MB 애플리케이션을 실행하려면 500MB를 다운로드해야합니다. 대부분의 설치 패키지는 전제 조건입니다.

경영진은 의존성 / 전제 조건이 너무 많다고 느낍니다. 나는 완전히 이해합니다. 그들은 우리가 .NET 프레임 워크에서 벗어나 설치 측면에서 여전히 "쉬운"땅으로 돌아갈 것을 제안합니다. 여기에서 저의 한 부분은 큰 그림의 이점, 향상된 개발 경험, 더 쉬운 유지 관리 및 전반적인 코드 품질을 설명하면서 .NET을지지하고 싶어합니다. 나의 다른 부분은 진심으로 동의합니다! .NET에서 개발하려면 설치를 복잡하게 만드는 다른 필수 구성 요소를 너무 많이 설치해야합니다.

예, 일부 .NET 지지자들은 모든 것이 패치되고 업데이트 된 운영 체제에 설치되어야한다고 주장 할 것입니다. 이것은 사실이지만 모든 고객이 이것을 가지고있는 것은 아니며 단순히 "미안합니다. 먼저 업데이트"라고 말하는 것만으로는 충분하지 않습니다. 우리는 전반적인 사용자 경험에 자부심을 느낍니다.

우리는 이제 네이티브 코드 작성을 다시 고려하고 있으며 개발 속도와 .NET의 모든 장점 측면에서 잃고 있다는 것을 알고 있습니다. 하지만 큰 그림을 보든 안 보든 작든이 영역에서 우리는 얻고 있습니다. 우리는 네이티브 코드 개발 기술을 가지고 있고 .NET이 실제로 우리에게 새로운 기반이 되었기 때문에 되돌아가는 것도 의미가 있습니다.

내 질문은 이것이다 : 만약 그것이 전혀 문제가된다면이 문제에 대한 귀사의 견해는 무엇이며, 모든 제품을 .NET으로 계속 마이그레이션하고 싶다고 가정 할 때 경영진에게 제안하는 비즈니스 사례는 어떤 모습일까요?


23
멋진 이야기에 +1.
jgauffin 2010

25
필요에 따라 구성 요소를 다운로드하는 .net 용 스텁 설치 프로그램이 없습니까? 전체 설치 프로그램을 번들로 묶는 것은 DVD 릴리스에 적합하지만 평가판을 다운로드 한 경우 .net 온라인 설치를 위해 온라인 상태라고 현실적으로 가정 할 수 있습니다.
Rup

4
아이러니하게도, 내 대학 시절 배운 .NET 책의 일부 : 주요 이점 중 하나 XCOPY 배포를 언급
Madhur Ahuja에게

25
Windows에 대한 종속성을 포함하는 것을 잊었습니다. 그것은 또 다른 몇 기가 바이트입니다. 부트 스트 래퍼를 사용하십시오.
Hans Passant

13
재미있는 이야기는, "당신이 정말로 제대로 새로운 프레임 워크를 사용하여 수행해야합니다 무엇을 어떻게하지 전체 회사의 사업 일부 마케팅 자료를 읽은과 학습을하기 전에 기초 않는 방법을 변경하려면"이라는 제목한다
앤드류 바버에게

답변:


50

이것이 많은 회사가 홈페이지에서 모든 필수 구성 요소를 즉시 다운로드하는 웹 설치 프로그램으로 전환 한 이유입니다. 대부분의 경우 OS에는 필요한 것의 99 %가 있습니다 (Windows 업데이트를 사용하여 업데이트 된 경우).

x64 및 x32에 대한 모든 것을 동일한 설치 프로그램에 넣지는 않을 것입니다. 각 아키텍처에 대해 하나씩 두 개의 설치 프로그램을 만듭니다.


2
x64 및 x86 설치 패키지를 단일 MSI 데이터베이스로 가져올 수 있다고 생각하지 않습니다.
David Heffernan

진실. 난 그냥 응답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 설치 프로그램이 필요합니다! 징징 ..
abatishchev

4
abatishchev : 소프트웨어가 "모든"아키텍처 용으로 컴파일 된 .NET 바이너리 인 경우 별도의 x86 및 x64 설치가 필요하지 않습니다. .NET 프레임 워크 자체를 설치해야하는 경우에만 별도의 설치 프로그램이 필요합니다.
Gabe

웹 설치 프로그램을 작성하는 경우 프록시 뒤에 사는 사람들에 대해 기억하십시오. Microsoft조차도 자신의 ISA 뒤에 사는 사람들에 대해 기억하지 못하는 경우가 많습니다 (웹 개발자 설치 프로그램을보고 있습니다).
Egor Pavlikhin 2010

39

Paint.NET은 기본적으로 .NET 프레임 워크를 번들로 제공하지 않고 필수 구성 요소 설치를 멋지게 래핑합니다. 최종 결과는 관리되지 않는 shim 실행 파일로 .NET 프레임 워크 및 기타 항목을 확인하고 설치 될 때 손을 잡습니다. 모두 필요에 따라 즉시 다운로드됩니다. 그런 다음 MSI로 pInvokes하는 WinForms 응용 프로그램을 실행하여 설치를 면모로 마무리합니다.

Google 가치가 있습니다.

또한 많은 클라이언트 컴퓨터에 Microsoft Update의 일부인 .NET Framework 버전이 이미 설치되어있어 비즈니스 세계에서 더 쉽게 사용할 수 있습니다.

설치에 대한 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/ (Rup에게 감사드립니다!)

이야기를 좀 더 읽어 보면 아마도 경영진은 최소한 한 번은 C ++ 애플리케이션으로 배포의 고통을 겪어야했지만 이제는 "쉬운"것으로 분류됩니다. 배포에 대해 시간을 할애하고이를 경영진에게 제시하고 고통을 숨기고 설치가 얼마나 쉬운 지 보여주세요. :)


링크 주셔서 감사합니다. 두 번째 부분은 blog.getpaint.net/2008/08/25/…입니다. (실제로 헤더에 있지만 페이지의 첫 번째 링크를 볼 수 없습니다)
Rup

@Rup 좋은 찾기! 나는 잠깐 봤는데 그것을 발견하지 못했다. 나는 그것을 보여주기 위해 내 대답을 수정할 것입니다.
Adam Houldsworth

Paint.net 용 4.0과 유사한 오픈 소스 설치 프로그램이 있는지 궁금합니다. .net 앱을 배포하는 모든 사람에게 매우 유용 할 것입니다.
dbkk 2010

1
@dbkk 당신이 나에게 말하고 있습니다! Paint.NET은 프로그램 및 설치 프로그램에 대한 코드를 릴리스하는 데 사용되었지만 그 이후로 작성자에게 크레딧을 제공하지 않는 카피 캣 프로그램으로 인해 수정되었습니다.
Adam Houldsworth 2010

1
Visual Studio가 열린 상태에서 Paint.NET을 설치 / 업데이트하면 Visual Studio가 손상 될 수 있습니다. 그래서 나는 그들의 설치 프로그램이 여전히 약간의 작업이 필요하다고 말하고 싶습니다.
그렉

37

처음에 네이티브 코드에서 .NET 코드로 전환하려는 이유로 돌아가 보겠습니다. 프로그래머로서 더 효율적입니다. .NET에서는 C ++ (또는 사용중인 모국어)보다 많은 것이 더 쉬우므로 애플리케이션을 훨씬 빠르게 개발할 수 있습니다.

그렇다면 설치 프로그램을 개발하는 데 소요되는 시간과 비교하여 애플리케이션 개발에 소요되는 시간은 어떻습니까? 설치 프로그램 (특히 프레임 워크 설정 부분)을 결정하는 데 몇 주를 소비해야하더라도 그 과정 을 거쳐야 하는 유일한 시간은 그 정도일 것입니다.

향후 모든 응용 프로그램의 경우 거의 동일한 설치 프로그램을 사용하게됩니다. 모든 필수 구성 요소 검사를 계속 수행하지만 파일을 C : \ Foo에 복사하는 대신 일부 다른 파일을 C : \ bar에 복사합니다.

제 생각에는 이것은 경제학에 대한 간단한 질문입니다. 예, .NET 응용 프로그램을위한 (좋은 / 완전한) 설치 프로그램을 개발하는 데 더 많은 비용이 들지만 그 단계가 필요한 경우 개발 시간을 대폭 향상시키기 한 번만 당연한 일입니다. 투자 수익은 아마도 몇 주 정도일 것입니다.


1
+1 .NET에서 좋은 설치 경험은 고정하기 어렵지만 말했듯이 원샷이어야합니다. System.Something.Class에 필요한 대부분의 상용구를 갖는 이점은 거의 값을 매길 수 없으며 설치 프로그램으로 인한 골칫거리 한두 번 가치가 있습니다.
Adam Houldsworth 2010

2
실제로 작동하는 최초의 부트 스트 래퍼 인 Wix Burn 의 출시를 기대하고 있습니다 (희망합니다). NSIS와 함께 DotNetInstaller는 현재 사용하고 있습니다. 그러나 UAC 처리는 아직 완벽하지 않습니다.
Uwe Keim

1
@Uwe Wix BurnDuke Nukem Forever 와 거의 같은시기에 출시 될 것으로 보입니다 .
dbkk 2010

그것은 좋을 것입니다. Duke Nukem Forever 의 미리보기 스크린 샷을 이미 보았습니다 . 곧해야한다 그래서이 ;-)
우베 KEIM

17

이 진술에 응답해야한다고 생각합니다.

예, 일부 .NET 지지자들은 모든 것이 패치되고 업데이트 된 운영 체제에 설치되어야한다고 주장 할 것입니다. 이것은 사실이지만 모든 고객이 이것을 가지고있는 것은 아니며 단순히 "미안합니다. 먼저 업데이트"라고 말하는 것만으로는 충분하지 않습니다. 우리는 전반적인 사용자 경험에 자부심을 느낍니다.

사용자가 공급 업체가 더 이상 목적에 적합하지 않다고 알린 시스템 운영하여 자신의 발을 쏘는 것을 고집하는 경우 경우, '도움'을 위해 할 수있는 일이별로 없습니다. 나는 이것이 나를 불쾌한 활동가처럼 보이게 만든다는 것을 알고 있지만, 수동 상인이 할 수있는 것과 같은 방식으로 그것을 봅니다. 그들이 내가 일하기를 원하는 환경이 있는지 확인하는 것은 고객에게 달려 있습니다. 제품에 적합합니다. 그렇지 않다면, 그 일을하기 위해 더 많은 보수를받을 것입니다.하지만 그들이 구매 한 것을 이해했는지 확인할 수있는 예지력이 없기 때문에 여전히 추가 작업을 유발할 수 있습니다.

나는 소프트웨어 고객들이 충분히 오랫동안 무지한 상태로 남아 있도록 허용되었고 이제 그들이 무엇을 구매하는지 이해해야한다고 믿습니다. 제대로 패치되지 않은 기업 IT 환경을 운영하는 것은 제조업체의 리콜 대상 차량을 계속 운영하는 것과 동일합니다. Windows 서비스 팩은 여러면에서 리콜과 동일합니다. 귀하는 법적으로 리콜을 제출할 의무가 없지만 사업으로서 귀하의 최선의 이익이며 책임 회피로 인한 손해에 대해 책임을 질 수 있습니다.


2
나는 제조업체 리콜이 비유 측면에서 약간 과도하다고 주장하고 싶습니다. 즉, 에어백이나 ABS보다 이전의 자동차를 운전하는 것과 비슷합니다. 새로운 기능이 품질을 개선하고 품질 표시 줄. 오래된 것들은 갑자기 깨지거나 위험 해지지 않습니다. 이제는 오늘날의 표준에서 기준 이하로 받아 들여지고 있습니다. Windows 95 팀은 당시 기준이 상당히 높다고 생각할 것이라고 주장 할 것입니다! :-) 그래도 나는 당신에게 동의합니다. 품질의 진행에 대한 무지는 미덕이 아닙니다.
Adam Houldsworth 2010

11
나는 100 % 동의하지 않는다. 고객은 너무 오랫동안 너무 많은 지식을 갖추어야했습니다. 내가 x86인지 x64인지 알아야하는 이유는 무엇입니까? 실행중인 서비스 팩을 알아야하는 이유는 무엇입니까? 소프트웨어를 구입하고 실행하려면 어떻게해야하는지 알아 보겠습니다. 소비자 소프트웨어는 iOS / 안드로이드 / 앱 스토어 모델로 변모하고 있으며, 사용자가 기기에 대한 가장 기본적인 세부 정보 이외의 것을 알아야하는 모든 개발자는 뒤쳐 질 것입니다.
kubi

1
@kubi 물론 iOS 비유는 하드웨어가 벤더 제어이기 때문에 변경되지 않는다는 가정과 함께 제공됩니다. PC는 완전히 구성 가능하므로 요구 사항에 대한 지식이나 인식이 필요합니다. 또는 최소한 자신이 수행하는 작업을 아는 사람이 있어야한다는 필요성을 인식해야합니다. 나는 내 타이어의 크기를 알고 있거나 내 타이어를 교체 할 것인지 아는 사람에게 내 차를 제공합니다.
Adam Houldsworth 2010

3
@kubi : 캐주얼 사용자 모델에 대해 동의합니다. 여기서 차이점은 사용자가 플랫폼 버전과 같은 모든 기술 문제를 개발자로서 i) 제조업체 또는 ii) 나에게 위임하지 않을 이유가 없다는 것입니다. 따라서 문제가되지 않습니다. 문제가되는 사용자는 자신의 구성에 대해 발언권을 가질 필요는 없으며 이러한 문제를 해결하기 위해 유능한 IT 공급자에게 비용을 지불해야하는 엔터프라이즈 사용자입니다.
Tom W

4
사용자는 우리의 주장에 신경 쓰지 않지만 소리가납니다. 그들은 당신의 소프트웨어를 사용하기를 원하지만 설치가 너무 힘들면 포기할 수 있습니다. 그들은 마이크로 소프트, 벤더 또는 그들 자신의 잘못을 덜 신경 쓸 수 있습니다.
dbkk 2010

7

모든 Visual C ++ 앱에는 런타임 6.0, 2003, 2005, 2008 또는 2010과 같은 필수 구성 요소 / 외부 종속성이 있습니다. SP, SP1 또는 SP2가 없습니까? x86 또는 x64? 2005 SP2에는 어떤 버전의 Windows Installer가 필요합니까? 그리고 2008 SP1은 무엇입니까? 기타 등등.

따라서 그것은 과장된 주장입니다! .NET에 대한 Joel의 불평 처럼 . 그리고 지금 무엇을보세요 !


3
Joel 웹 사이트 링크 +1
Security Hound

-1은 Joels 웹 사이트에 연결합니다.
Phill

런타임에 정적으로 링크 할 수 있으므로 이러한 종속성이 필요하지 않습니다.
Tony Edgecombe 2011 년

1
@Tony : 21 세기의 10 년대에 정적으로 연결되어 있습니까? 절대 mauvais 톤 )
abatishchev

Joel의 웹 사이트 링크 +1
Shahid M Zubair

3

C ++ Builder보다 .net에 대한 전제 조건이 훨씬 더 많이 있는지 알 수 없습니다. SQL Server에 대해 불평하지만 C ++ 빌더로 일부 데이터베이스를 설치해야한다는 사실을 무시합니다. x64 대 x32에 대해 불평하지만 .NET은 변경이 필요하지 않습니다. 동일한 exe가 둘 다에서 실행됩니다 (두 환경에 대해 최적으로 컴파일 됨). C ++ Builder에 대해서도 마찬가지입니다. 별도의 SQL 서버 버전이 필요할 수 있지만 C ++ 빌더에 적용됩니다 (모든 항목에 x32 만 설치하지 않는 한).

예, 새로운 설치 프로그램 버전 문제가 있지만 이러한 구성 요소는 그다지 크지 않습니다. 그리고 실제로 필요한 aprts 만 다운로드하여 설치하도록 설치 프로그램을 얻을 수 있습니다.

좋은 설치 프로그램을 만드는 데 이미 시간을 투자했기 때문에 C ++ 빌더가 더 쉬울 것입니다. .NET에 대해 동일한 작업을 수행해야하며 실제 문제에 따라 선택할 수 있습니다.

그건 그렇고, Microsoft가 자신이하는 방식으로 작업을 선택하는 이유는 많은 사용자, 특히 기업 사용자가 자동으로 설치하는 것을 좋아하지 않기 때문입니다 (아마도 특정 버전의 라이브러리에 의존하는 응용 프로그램이 있기 때문일 수 있습니다. 쉽게 제거 할 수없는 새 버전으로 지워 버립니다.)

지식이 부족한 사람들에게 "쉽게 만들기"라고 생각하는 것은 실제로 자신이하는 일을 아는 사람들을 위해 일을 훨씬 더 어렵게 만드는 것입니다.

여기에 좋은 예가 있습니다. 내가 절대적으로 경멸하는 한 가지는 SQL Server가 필요한 앱을 설치할 때 SQL Server의 자체 인스턴스를 설치하는 것입니다. 이미 여러 인스턴스를 사용할 수있을지라도. 초보자에게는 쉽고, 앱이 내 단일 인스턴스와 함께 작동하도록 시도하는 것은 당혹 스럽습니다.


1

앱이 Mono에서 실행되는 경우 Mono 런타임으로 앱을 배송하는 것이 덜 고통 스러울 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.