NET (canavar) lehine veya aleyhine dava [kapalı]


92

Çalıştığım şirket C ++ Builder 6 kullanıyor. Tasarımdan beri yerel kod geliştiriyoruz. Amiral gemisi ürünümüz tamamen yerel kod ile yazılmıştır.

.NET Framework'e çan ve ıslıklarıyla girer. Düşüyorum, oltayı, ipi ve kurşunu. Yönetimi, .NET'in tüm yeni yazılım geliştirme için kesinlikle yeni çerçevemiz olması gerektiğine ve mevcut kod hattımızı en kısa sürede taşımaya başlamamız gerektiğine ikna ediyorum. Tüm faydaları ile ikna edici olmuyor. Teklifimi her zamanki gibi kabul ediyorlar.

Bu noktada ilk .NET uygulamamı geliştirmeye başladım. Her şey planlandığı gibi gidiyor. Proje, ürünümüzün sadece bir bileşenidir. Ve böylece bu yeni bileşen için bir yükleyici oluşturma noktasına geldim. Şirket olarak, kullanıcı için işleri olabildiğince kolaylaştırmaktan gurur duyuyoruz. Binlerce geliştiriciye sahip Microsoft bile bizim yaptığımız gibi yükleyiciler oluşturmuyor. Örneğin, Microsoft CRM'yi kurduğunuzda, yalnızca devam etmeden önce yüklenmesi gereken arızaların ve ön koşulların bir listesini alırsınız. Biz değil. Asla. Bir şeye ihtiyacınız olursa, sizin için kuracağız.

Bu, kurulumlarımızı çok kolay hissettiriyor. .NET Framework yüklü değil mi? Sorun değil! Bunu sizin için yapacağız. SQL Native istemcisine mi ihtiyacınız var? İnce!

Sorun şu ki, çözümümüzün tek bir bileşeni .NET ile yazıldığı için kurulum sürecini inanılmaz derecede karmaşık hale getiriyor. Ürünümüzü kurmaya bile başlamadan önce aşağıdakileri yapmam gerekiyor:

  • Ön koşulun yüklü olup olmadığını tespit edin

  • Değilse kurun

  • Başarıyla kurulduğunu doğrulayın

  • Sonraki ön koşul

.NET Framework'ü yüklemek için önce Windows Installer 4.5'e ihtiyacım var. Ancak farklı işletim sistemleri için farklı sürümler var, bu yüzden işletim sistemi algılaması ekliyorum ve doğru EXE'yi başlatıyorum. Oh, .NET çerçevesi zaten 2k8 ile paketlenmiştir ve yükleyici exe üzerinde çalışamaz, onu kurmak için OCSetup.exe'yi parametrelerle çalıştırmanız gerekir.

Ve böylece devam ediyor. Ardından SQL Express 2005'in yüklenmesi gerekir. Bağımlılıklar bir kez daha artıyor.

Yönetimle, Microsoft'un bile bunu kullanıcı için bu kadar kolaylaştırmadığını tartışıyorum. Onların cevabı, bu şekilde onlardan daha iyi olmamamız için hiçbir neden olmamasıdır. Yaklaşımlarını benimsemelerinin çok iyi nedenleri olduğunu düşünmem dışında bununla tartışamam.

Aniden, yükleyicimiz çok büyük. NET için tüm ön koşullar, yüklenecek tamamen ayrı bir EXE aralığı olan 64 bit desteğinden bahsetmemek bile. Artık kullanıcıların "hızlı" bir değerlendirme indirebilmesini istediğimiz noktaya geldi. Ne şaka ama. 30MB'lık bir uygulamayı çalıştırmak için 500MB indirmeniz gerekiyor. Yükleme paketinin çoğu ön koşullardır.

Yönetim, çok fazla bağımlılığımız / ön koşulumuz olduğunu düşünüyor. Tamamen anladım. NET çerçevesinden uzaklaşıp, kurulum açısından işlerin hala "kolay" olduğu yerel bölgeye geri dönmemizi öneriyorlar. Bu, bir parçamın büyük resimdeki faydaları, iyileştirilmiş geliştirme deneyimini, daha kolay bakımı ve genel kod kalitesini açıklayarak .NET için ayağa kalkmak istediği yerdir. Diğer tarafım onlarla gönülden hemfikir! NET'te geliştirme, kurulumu zorlaştıran çok sayıda başka önkoşul yüklemenizi gerektirir.

Evet, bazı .NET savunucuları, her şeyin yamalı ve güncellenmiş bir işletim sistemine yüklenmesi gerektiğini iddia edeceklerdir. Bu doğru, ancak tüm müşteriler buna sahip değil ve sadece "Üzgünüm, önce güncelle" demek yeterli olmayacak. Unutmayın, genel kullanıcı deneyiminden gurur duyuyoruz.

Şimdi tekrar yerel kod yazmayı düşünüyoruz ve geliştirme hızı ve .NET'in tüm güzellikleri açısından kaybettiğimizi biliyorum. Ama büyük resme baksanız da bakmasanız da küçük olsun bu alanda kazanıyoruz. Yerel kod geliştirme becerilerine sahip olduğumuz ve .NET aslında bizim için yeni bir zemin olduğu için, geri dönmek bile mantıklı.

Sorum şu: Eğer bu bir sorun olsa bile şirketinizin bu konudaki görüşü nedir ve tüm ürünlerimizi .NET'e taşımaya devam etmek istediğimi varsayarak yönetime önerdiğim iş durumu nasıl görünecek?


23
Güzel bir hikaye için +1.
jgauffin

25
.Net için bileşenleri gerektiği gibi indiren saplama yükleyicileri yok mu? Tam yükleyicilerin paketlenmesi bir DVD sürümü için doğrudur, ancak bir değerlendirme indirmişlerse, çevrimiçi bir .net yüklemesi için çevrimiçi olduklarını gerçekçi bir şekilde varsayabilirsiniz.
Rup

4
İronik bir şekilde, üniversite günlerimde öğrendiğim bazı .NET kitaplarında XCOPY dağıtımının en büyük avantajlarından biri olarak bahsediliyor :)
Madhur Ahuja

25
Windows'a bağımlılığınızı eklemeyi unuttunuz. Bu da bir çift gigabayt. Bootstrappers'ı kullanın.
Hans Passant

13
İlginç hikaye, "Bazı pazarlama materyallerini okumaya dayalı olarak ve yeni çerçeveyi doğru şekilde kullanmak için gerçekten ne yapmanız gerektiğini öğrenmeden önce tüm şirketinizin iş yapma şeklini nasıl DEĞİŞTİRMEZ" başlığını taşımalıdır
Andrew Barber

Yanıtlar:


50

Bu, birçok şirketin tüm ön koşulları ana sayfanızdan anında indiren web yükleyicilerine geçmesinin nedenidir. Çoğu durumda, işletim sistemi gerekli olanın% 99'una sahiptir (Windows Update kullanılarak güncellenmişlerse).

X64 ve x32 için her şeyi aynı yükleyiciye koymam. Her mimari için bir tane olmak üzere iki yükleyici oluşturun.


2
X64 ve x86 kurulum paketlerini tek bir MSI veritabanına alabileceğinizi sanmıyorum.
David Heffernan

Doğru. Az önce yanıt verdimSuddenly, 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
HERHANGİ bir yazılım için ayrı x86 ve x64 yükleyicileri gerekir! Whining ..
abatishchev

4
abatishchev: Eğer yazılım "Herhangi" mimarisi için derlenmiş bir .NET ikilisi olsaydı, ayrı x86 ve x64 kurulumlarına gerek kalmazdı. Yalnızca .NET çerçevesini kurmanız gerektiğinde ayrı yükleyicilere ihtiyacınız vardır.
Gabe

Bir web yükleyicisi yazarsanız, lütfen proxy'lerin arkasında yaşayan insanları hatırlayın. Microsoft bile genellikle kendi ISA'larının arkasında yaşayan insanları hatırlamakta başarısız oluyor (size Web Developer yükleyicisine bakıyorum).
Egor Pavlikhin

39

Paint.NET, .NET çerçevesini varsayılan olarak onunla paketlemeden ön koşulların kurulumunu güzelce tamamlar. Sonuç, .NET çerçevesini ve diğer bazı şeyleri kontrol eden ve kurulduğunda elinizi tutan yönetilmeyen bir şim yürütülebilir dosyasıdır; hepsi ihtiyaç duyuldukça anında indirilir. Daha sonra, kurulumu pamuk yünü ile daha da sarmak için MSI'ya pInvoke eden bir WinForms uygulaması çalıştırırlar.

Google'a değer.

Ayrıca, Microsoft Update'in bir parçası olduğu için birçok istemci makinesinin halihazırda yüklü bir .NET Framework sürümüne sahip olması muhtemeldir - bu da onu iş dünyasında daha kolay tüketilebilir hale getirir.

Paint.NET blog gönderileri:

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/ (teşekkürler Rup!)

Hikayeyi biraz daha okumak, muhtemelen yönetim en az bir kez C ++ uygulamasıyla dağıtımın acısını yaşamak zorunda kaldı, ancak şimdi yapıldı ve "kolay" olarak sınıflandırıldı. Konuşlandırmaya biraz zaman ayırın ve bunu yönetime sunun ve acıyı gizleyerek onlara kurulumun ne kadar kolay olduğunu gösterin :)


Bağlantı için teşekkürler. İkinci bölüm ise blog.getpaint.net/2008/08/25/... (o başlıklarında orada aslında rağmen, sayfadaki ilk bir bağlantı göremiyordu)
Rup

@Rup güzel bul! Kısa bir baktım ve fark etmedim. Cevabımı göstermek için değiştireceğim.
Adam Houldsworth

Paint.net için 4.0'a benzer bir açık kaynaklı yükleyici olup olmadığını merak ediyorum. .Net uygulamaları dağıtan herkes için son derece yararlı olacaktır.
dbkk

1
@dbkk bana söylüyorsun! Paint.NET eskiden programın ve yükleyicinin kodunu serbest bırakırdı, ancak o zamandan beri copy-cat programlarının yazara kredi vermemesi nedeniyle yeniden düzenlendi.
Adam Houldsworth

1
Paint.NET'i görsel stüdyo açık olarak kurarsanız / güncellerseniz, görsel stüdyoyu bozabilir. Bu yüzden kurulumcunun hala biraz çalışmaya ihtiyacı olduğunu söyleyebilirim.
Greg

37

İlk olarak neden yerel koddan .NET koduna geçmek istediğinize geri dönelim: bir programcı olarak sizin için daha verimli. NET'te birçok şey C ++ 'da olduğundan (veya hangi ana dili kullanıyor olursanız olun) daha kolaydır ve böylece uygulamalarınızı çok daha hızlı geliştirebilirsiniz.

Öyleyse, uygulamayı geliştirmek için harcadığınız zaman, yükleyiciyi geliştirmek için harcadığınız zamanla nasıl karşılaştırılır? Eğer fazla veya daha az olmalıdır yükleyici (özellikle çerçeve kurulum kısmı), çivilemekten birkaç hafta harcamak zorunda olsa bile sadece Buna katlanmak zorunda saati.

Gelecekteki tüm uygulamalar için, neredeyse aynı bir yükleyici kullanıyor olacaksınız; yine de tüm ön koşul kontrollerini yaparsınız, ancak dosyaları C: \ Foo'ya kopyalamak yerine, bazı farklı dosyaları C: \ bar'a kopyalıyorsunuz.

Bence bu basit bir ekonomi sorusu. Evet, bir .NET uygulaması için (iyi / eksiksiz) bir yükleyici geliştirmek daha pahalıdır, ancak bu, geliştirme sürenizi önemli ölçüde iyileştirmek için bir kez atmanız gereken adımsa, zahmetsizdir. Yatırım getiriniz muhtemelen hafta sırası olacaktır.


1
+1 .NET'te iyi bir yükleme deneyimi belirlemek zordur, ancak sizin de söylediğiniz gibi, yalnızca tek seferlik olmalıdır. Bir System.Something.Class uzakta olmak üzere ihtiyaç duyacağınız çoğu standart malzemeye sahip olmanın yararı neredeyse paha biçilemez ve yükleyicinin neden olduğu bir iki baş ağrısına değer.
Adam Houldsworth

2
O zamanlar gerçekten çalışan ilk önyükleyici olan Wix Burn'un piyasaya sürülmesini arzularla bekliyorum (umarım). NSIS ile birlikte DotNetInstaller şu anda kullandığım şey. Ancak bu UAC kullanımı henüz mükemmel olmaktan uzak.
Uwe Keim

1
@Uwe Görünüşe göre Wix Burn , Duke Nukem Forever ile yaklaşık aynı zamanda çıkacak .
dbkk

Bu harika olurdu. Duke Nukem Forever'ın ekran görüntülerini önceden görmüştüm . Yani yakında orada olacak ;-)
Uwe Keim

17

Bu ifadeye cevap vermem gerektiğini hissediyorum:

Evet, bazı .NET savunucuları, her şeyin yamalı ve güncellenmiş bir işletim sistemine yüklenmesi gerektiğini iddia edeceklerdir. Bu doğru, ancak tüm müşteriler buna sahip değil ve sadece "Üzgünüm, önce güncelle" demek yeterli olmayacak. Unutmayın, genel kullanıcı deneyiminden gurur duyuyoruz.

Kullanıcınız, satıcının artık amaca uygun olmadığını bildirdiği bir sistemi çalıştırarak kendilerini ayağından vurmakta ısrar ediyorsa, onlara "yardım" etmek için yapabileceğiniz pek bir şey yoktur. Bunun beni iğrenç bir aktivist gibi gösterdiğinin farkındayım, ancak buna manuel bir tüccarın yapabileceği gibi bakıyorum - çalışmamı istedikleri ortamın olmasını sağlamak müşteriye kalmıştır. sağlam ve ürüne uygun. Değilse, bu işi yapmak için daha fazla yeniden sayımı kabul edeceğim, ancak yine de fazladan çalışmaya neden olabilir çünkü ne satın aldıklarını anladıklarından emin olmak için öngörüleri yoktu.

Yazılım müşterilerinin yeterince uzun süre bilgisiz kalmalarına izin verildiğine ve şimdi ne satın aldıklarını anlamaları gerektiğine inanıyorum. Düzgün bir şekilde yamalanmamış kurumsal bir BT ortamının işletilmesi, bir üreticinin geri çağırmasına tabi olan bir aracı çalıştırmaya devam etmekle aynıdır - Windows hizmet paketi, birçok açıdan geri çağırmaya eşdeğerdir. Yasal olarak bir geri çağırma talebinde bulunmak zorunda değilsiniz, ancak bu bir işletme olarak sizin yararınıza ve sorumluluktan kaçmanızın neden olduğu zararlardan sorumlu tutulabilirsiniz.


2
Üreticinin geri çağırmasının bir benzetme açısından biraz abartılı olduğunu iddia ediyorum - daha çok hava yastıkları veya ABS'yi önceden tarihlendiren bir araba sürmeye benziyor - kaliteyi artıran ve yükselten yeni özellikler geldi kalite çubuğu. Eski şeyler aniden kırılmaz veya tehlikeli hale gelmez, şimdi sadece bugünün standartlarında çıtanın altında olduğu kabul ediliyor, eminim Windows 95 ekibi çıtanın oldukça yüksek olduğunu düşündükleri sırada tartışacaktır! :-) Yine de sana katılıyorum, kalitenin ilerleyişinin cehaleti bir erdem değil.
Adam Houldsworth

11
% 100 katılmıyorum. Müşterilerin çok uzun süredir çok bilgili olması gerekiyordu. X86 mı x64 mü olduğumu neden bilmeliyim? Hangi hizmet paketini çalıştırdığımı neden bilmeliyim? Yazılımınızı satın almama izin verin ve onu çalıştırmak için ne olması gerektiğine karar verin. Tüketici yazılımı, amansız bir şekilde bir iOS / Android / AppStore modeline doğru ilerliyor ve kullanıcıların cihazlarıyla ilgili en temel ayrıntılar dışında herhangi bir şey bilmesini isteyen herhangi bir geliştirici geride kalacak.
kubi

1
@kubi tabii ki iOS benzetmesi, donanımın satıcı kontrolünde olduğu için değişmeyeceği varsayımıyla geliyor. Bilgisayarlar tamamen yapılandırılabilir, bu nedenle bazı bilgiler veya gereksinimler hakkında farkındalık gereklidir - ya da en azından birinin ne yaptıklarını nasıl bilmesi gerektiğinin farkında olunması gerekir. Ya lastiklerimin boyutunu biliyorum ya da arabamı lastiklerimi değiştirip değiştirmeyeceğimi bilen birine veriyorum.
Adam Houldsworth

3
@kubi: Sıradan kullanıcı modeli konusunda sizinle aynı fikirdeyim - buradaki fark, kullanıcının platform sürümü gibi tüm teknik sorunları bir geliştirici olarak i) üreticiye veya ii) bana devretmemiş olması için hiçbir neden olmamasıdır. Bu nedenle sorun değiller. Sorun olan kullanıcı, yapılandırmaları üzerinde söz sahibi olamayacak ve bu sorunları çözmek için yetkili bir BT sağlayıcısına ödeme yapması gereken kurumsal kullanıcıdır.
Tom W

4
Kullanıcılar, ne kadar sağlam olursa olsun hiçbir argümanımızı umursamıyor. Yazılımınızı kullanmak istiyorlar ... ancak kurulum çok zahmetli olursa vazgeçebilirler. Kimin suçlu olduğu umurlarında değil - Microsoft'un, satıcıların ya da kendilerinin.
dbkk

7

Herhangi bir Visual C ++ uygulamasının önkoşulları / harici bağımlılıkları vardır: çalışma zamanı 6.0, 2003, 2005, 2008 veya 2010? SP, SP1 veya SP2 yok mu? x86 veya x64? 2005 SP2 hangi Windows Installer sürümünü gerektirir? Ve ne 2008 SP1? Ve bunun gibi.

Yani bu çok zor argümanlar! Joel'in .NET hakkındaki homurdanmaları gibi . Ve bak şimdi ne var !


3
Joel'in web sitesine bağlantı için +1
Security Hound

Joels web sitesine bağlantı için -1.
Phill

Çalışma zamanına statik olarak bağlanabilirsiniz, böylece bu bağımlılıklara ihtiyacınız kalmaz.
Tony Edgecombe

1
@Tony: 21. yüzyılın 10'unda statik olarak bağlanma? Mutlak mauvais ton ;)
abatishchev

Joel'in web sitesine bağlantı için +1
Shahid M Zubair

3

.Net için C ++ Builder'dan çok daha fazla ön koşul olduğunu görmüyorum. SQL Server'dan şikayet ediyorsunuz, ancak bazı veritabanlarını C ++ oluşturucu ile kurmanız gerektiği gerçeğini de görmezden geliyorsunuz. X64'e karşı x32'den şikayet ediyorsunuz, ancak .NET herhangi bir değişiklik gerektirmiyor .. aynı exe her ikisinde de çalışıyor (ve her iki ortam için de kendini en uygun şekilde derliyor). C ++ Builder için aynı şey söylenemez. SQL sunucusunun ayrı sürümlerine ihtiyacınız olabilir, ancak bu yine C ++ oluşturucu için geçerlidir (her şeye yalnızca x32 yüklemediğiniz sürece).

Evet, yeni yükleyici sürümü sorunları var, ancak bu bileşenler çok büyük değil. Ve gerçekten de yükleyicilerin yalnızca gerekli olan aprts'ı indirip yüklemesini sağlayabilirsiniz.

C ++ oluşturucu muhtemelen sizin için daha kolaydır, çünkü zaten iyi bir yükleyici oluşturmaya zaman ayırdınız. NET için aynısını yapmanız gerekir ve sonra gerçek sorunlara göre seçim yapabilirsiniz .. buna değil.

Bu arada, Microsoft'un işleri bu şekilde yapmayı seçmesinin nedeni, pek çok kullanıcının, özellikle de kurumsal kullanıcıların, kendileri için bir şeylerin otomatik olarak yüklenmesini takdir etmemeleridir (belki de bir kitaplığın belirli bir sürümüne bağlı bir uygulamaya sahip oldukları için, ve gelip kolayca kaldıramayacakları yeni bir sürümle silersiniz).

Daha az bilgili insanlar için "işleri kolaylaştırmak" olarak gördüğünüz şey, aslında ne yaptıklarını bilenler için işleri ÇOK daha zor hale getiriyor.

İşte güzel bir örnek. Kesinlikle küçümsediğim bir şey , SQL Server'a ihtiyaç duyan bir uygulamayı yüklediğimde ve kullanabileceği birkaç örneğim olsa bile kendi SQL Server örneğini yüklediğimde. Acemi için kolay, uygulamanızı benim tek örneğimle çalıştırmayı denemek için başıma gelen bir acı.


1

Uygulamanız Mono altında çalışıyorsa, uygulamanızı Mono çalışma zamanıyla göndermek daha az zahmetli olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.