支持或反对.NET(野兽)

Mal*_*rap 92 .net c#

我工作的公司使用C++ Builder 6.我们从构思开始就一直在开发本机代码.我们的旗舰产品完全使用本机代码编写.

使用它的铃声和口哨进入.NET Framework.我跌倒,勾,线和坠子.我说服管理层.NET应该绝对是我们所有新软件开发的新框架,我们应该尽快开始迁移现有的代码行.拥有所有好处并不需要太多说服力.他们像往常一样接受我的建议.

此时我开始开发我的第一个.NET应用程序.这一切都按计划进行.该项目只是我们产品的一个组成部分.所以我开始为这个新组件创建一个安装程序.作为一家公司,我们为自己尽可能简单地为用户制作东西感到自豪.即使是拥有数千名开发人员的微软也不像我们那样创建安装程序.例如,当您安装Microsoft CRM时,您将只能获得需要安装的故障和先决条件的列表,然后才能继续.不是我们.决不.如果您需要什么,我们会为您安装.

这使我们的安装感觉如此简单..NET Framework没有安装?没问题!我们会为你做的.需要SQL Native客户端吗?精细!

问题在于,现在我们的解决方案的一个组件是用.NET编写的,它使安装过程变得异常复杂.在我甚至可以安装我们的产品之前,我需要执行以下操作:

  • 检测是否已安装先决条件

  • 如果不是,请安装它

  • 验证它是否已成功安装

  • 下一个先决条件

要安装.NET Framework,我首先需要Windows Installer 4.5.但是对于不同的操作系统有不同的版本,所以我添加操作系统检测并启动正确的EXE.哦,.NET框架已经打包了2k8并且安装程序exe无法在其上运行,您必须运行带参数的OCSetup.exe来安装它.

它继续下去.然后需要安装SQL Express 2005.依赖关系再次增加.

我与管理层争论说,即使微软也不会让用户这么容易.他们的反应是我们没有理由以这种方式比他们更好.我不能与之争辩,除了我觉得他们采用他们的方法有很好的理由.

突然间,我们的安装程序非常庞大..NET的所有先决条件,甚至没有谈论64位支持,它有一整套独立的EXE要安装.所以现在我们希望用户能够下载"快速"评估.真是笑话.您需要下载500MB才能运行30MB的应用程序.大多数安装包都是先决条件.

管理层认为我们有太多的依赖/先决条件.我完全理解.他们建议我们从.NET框架转移回原生土地,在安装方面仍然"容易".这是我的一部分想要代表.NET解释大局的好处,改进的开发体验,更容易维护和整体代码质量的地方.我的另一部分全心全意地同意了!在.NET中开发只需要安装太多其他先决条件,这会使安装变得复杂.

是的,一些.NET支持者会声称应该在修补和更新的操作系统上安装所有内容.这是事实,但并非所有客户都有这个,只是说"我很抱歉,先更新"只是不会削减它.请记住,我们为整体用户体验感到自豪.

我们现在正在考虑再次编写本机代码,我知道我们在开发速度和.NET的所有好处方面都失败了.但是我们正在这个领域获得成功,如果你看一下大局,我们就会变小.由于我们拥有本机代码开发技能,而.NET实际上是我们的新基础,因此回归也是有意义的.

我的问题是:如果这个问题甚至是一个问题,你的公司对这个问题的看法是什么?如果我想继续将所有产品迁移到.NET,我建议管理层提出什么样的商业案例?

jga*_*fin 50

这就是为什么许多公司已经切换到从主页上即时下载所有先决条件的网络安装程序的原因.因为在大多数情况下,操作系统有99%的需要(如果它们已使用Windows Update更新).

我不会在同一个安装程序中放置x64和x32的所有内容.创建两个安装程序,每个安装程序一个.

  • 任何软件都需要单独的x86和x64安装程序!呜呜... (6认同)
  • abatishchev:如果该软件只是为"Any"架构编译的.NET二进制文件,则不需要单独的x86和x64安装.只有在必须安装.NET框架本身时才需要单独的安装程序. (4认同)
  • 我不相信你可以将x64和x86安装包放到一个MSI数据库中. (2认同)

Ada*_*rth 39

Paint.NET很好地包装了先决条件的安装,而没有默认情况下将.NET框架与它捆绑在一起.最终结果是一个非托管的shim可执行文件,它检查.NET框架和其他一些东西,并在安装时握住你的手; 所有这些都是在需要时随时下载的.然后他们运行一个WinForms应用程序,该应用程序将进入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/ (感谢Rup!)

更多地阅读故事,大概是管理层必须经历至少一次使用C++应用程序的部署的痛苦,但它现在已经完成并被归类为"简单".花一些时间来反对部署并将其呈现给管理层,并隐藏痛苦,向他们展示安装是多么容易:)


Mar*_*off 37

让我们回过头来为什么要首先从本机代码切换到.NET代码:作为程序员,它对您来说更有效率..NET中的许多东西比使用C++(或者您使用的任何本地语言)更容易,因此您可以更快地开发应用程序.

那么,您开发应用程序所花费的时间与开发安装程序所花费的时间相比如何?即使你不得不花费几个星期下来钉安装程序(特别是框架安装部分),这应该是或多或少只是你必须要经过的时间.

对于所有未来的应用程序,您将使用几乎相同的安装程序; 您仍然会执行所有先决条件检查,但不是将文件复制到C:\ Foo,而是将一些不同的文件复制到C:\ bar.

在我看来,这是一个简单的经济学问题.是的,为.NET应用程序开发(良好/完整)安装程序的成本更高,但如果这是您需要采取一次以显着缩短开发时间的步骤,那么这是一个明智的选择.您的投资回报可能是几周.

  • 我非常期待发布_Wix Burn_,这是当时第一个真正起作用的引导程序(我希望).DotNetInstaller和NSIS是我目前正在使用的.但是,UAC的处理还远非完美. (2认同)

Tom*_*m W 17

我觉得我需要回应这句话:

是的,一些.NET支持者会声称应该在修补和更新的操作系统上安装所有内容.这是事实,但并非所有客户都有这个,只是说"我很抱歉,先更新"只是不会削减它.请记住,我们为整体用户体验感到自豪.

如果您的用户坚持通过操作供应商告知他们不再适合的系统自己脚射击,那么您无能为力"帮助"他们.我知道这让我看起来像一个讨厌的活动家,但我看的方式与手工商人的方式相同 - 由客户来确保他们希望我工作的环境是声音适合产品.如果不是,我会接受进一步的重新计划来完成这项工作,但它可能仍然会导致他们额外的工作,因为他们没有先见之明,以确保他们了解他们正在购买什么.

我相信软件客户已被允许长时间保持无知,现在他们应该被要求了解他们正在购买什么.操作未经适当修补的公司IT环境与继续运行受制造商召回的车辆相同 - Windows服务包相当于在许多方面进行召回.您在法律上没有义务接受召回,但这符合您作为企业的最大利益,您可能要对您推卸责任所造成的损害负责.

  • 我不同意100%.客户被要求知识太长时间.我为什么要知道我是x86还是x64?我为什么要知道我正在运行什么服务包?让我购买你的软件,你就可以弄清楚要让它运行起来需要做些什么.消费者软件无情地转向iOS/Android/AppStore模型,任何需要用户了解除设备最基本细节之外的任何其他开发人员都会落后. (11认同)
  • 用户不关心我们的任何论点,无论多么合理.他们想要使用你的软件......但如果安装太痛苦,可能会放弃.他们可以更少关心谁的错 - 微软,供应商或他们自己. (4认同)
  • @kubi:我同意你的休闲用户模式 ​​- 不同之处在于,用户没有理由不将平台版本等所有技术问题委托给i)制造商或ii)我作为开发人员.因此它们不是问题.问题的用户是企业用户,他们不一定对他们的配置有发言权,谁应该有一个有能力的IT提供商付钱来解决这些问题. (3认同)
  • 我认为制造商的召回在类比方面有点过分 - 我会说,这更像是驾驶一辆提前安装气囊或ABS的汽车 - 新功能已经提高了质量,并提高了质量条.旧的东西不会突然破坏或危险,它现在只被接受为低于标准的今天标准,我敢肯定Windows 95团队会争辩说当时他们认为酒吧很高!:-)我仍然同意你的看法,对质量进步的无知不是一种美德. (2认同)

aba*_*hev 7

任何Visual C++应用程序都具有先决条件/外部依赖性:运行时6.0,2003,2005,2008或2010?没有SP,SP1或SP2?x86还是x64?2005 SP2需要什么版本的Windows Installer?什么是2008 SP1?等等,等等.

因此,这是一个牵强附会的论点!就像乔尔对.NET 的抱怨一样.看看现在是什么!

  • +1链接到Joel的网站 (3认同)