问题 我应该在部署之前预编译ASP.NET 2.0站点吗?


在我工作的地方,我们做了非常多的非常小的ASP.NET应用程序,并且已经发生了几次以预编译格式部署网站,并且需要更改应用程序,但源代码中可用的代码版本控制已过期,开发人员无法使用。该应用程序的DLL必须反编译并一起黑客入侵。

理想情况下,开发人员不会通过测试和生产来推动更改并跳过检查更改,我们已经对我们的策略进行了更改以防止这种情况发生,但我想知道是否在服务器上编译站点的开销每当应用程序池重新启动都是一个很大的问题,我们应该避免将代码直接上传到服务器。如果我们可以下载实时源,那么检查源代码管理中的版本与实际的实时版本会更容易。

VS编译VS直接上传到服务器并在那里编译它们有什么好处?


6165
2018-06-15 15:18


起源

如果开发人员对生产代码进行直接更改,绕过源代码控制和标准发布流程,那么除了担心预编译之外,还有更大的问题。 - ahockley
同意,但我正努力尽我所能。拥有更大的组织问题是我无法解决的,没有理由不去理解我可以在我的水平上影响的事情。 - NetHawk


答案:


我不同意这一点给出的大部分答案。通过临时发布文件进行预编译有许多优点,其中最重要的是生产和测试环境中的代码或多或少保持同步。预编译可确保您测试的代码是生产代码 一切 时间。

您遇到的问题不是预编译与首次运行编译之间的问题。相反,它源于您正在使用的源控件类型。如果我不得不猜测(我这样做),我会说你正在运行Visual SourceSafe。如果您要切换到使分支和合并变得微不足道的源控制系统,那么您可以将代码分离 stable 和 development 分支机构。错误修复发生在 dev 分支(然后合并回到 stable 分支一旦验证)。这样,未经测试或未准备好的黄金时间代码不会在生产服务器上结束,而且您总是拥有该代码的副本 stable 开始工作。


8
2018-06-15 16:45



谢谢,罗布。我把它投票作为一个好的对应点并且非常有用。这似乎是一个很好的过程,我们这里的整个系统都非常特别。你在这里使用SS是正确的,我希望能用更好的东西。 - NetHawk


首先想到的是:

  1. 商业秘密问题
  2. 安全问题
  3. 邋Joe Joe Moe(Lazy,Careless和Pitiful想成为开发者)
  4. Ad Hoc Hacking Code失控。

    • 预编译 代码以托管格式安全有效地在.Net Framework上运行。
    • 未编译 代码由新手部署,他们没有花时间考虑与不安全代码相关的许多问题,这些问题对于最终用户来说效率较低。

终端用户 是 赌注持有人 并且是开发人员的目标 信托责任开发商 应该利用有机会提高产品的效率。

免责声明:这些评论是“按原样”陈述的,如果你拼写检查我,我不会给出一个该死的。

此致

DrFunkie

Bad Speller,但该死的好开发者。 :)


2
2018-02-12 14:56





从纯粹易用性的角度来看,我确实喜欢将源文件上传到服务器而忘记了预编译。

这就是我为我管理的所有网站所做的工作,即使是大网站。我确实习惯于点击应用程序中更重要的部分来确保一切正常(并且在我使用它时编译它们)。

这是另一个想法。如果网站是公开的,你可以让 w3c链接检查器 松散的。这将具有编译它命中的每个页面的效果。无论如何要做到这一点是件好事,以确保您没有任何断开的链接。

简单地说,我认为这些例行检查几乎消除了用户首次访问编译速度慢的问题。因为无论如何这是一个很好的例程,它对我来说效果很好。


1
2018-06-15 15:28



谢谢,史蒂夫。每个页面是单独编译的吗?似乎第一次请求就是性能上的提升。 - NetHawk
aspx文件是单独编译的。在典型配置中,代码隐藏不是因为它们被卷入DLL。 - Steve Wortham


这取决于应用程序的大小和使用频率。如果它被定期使用以至于应用程序池只在一天结束时被回收,那么早上第一次启动时的短暂等待可能是值得的。如果它每30分钟才被击中一次,每次强制重新编译,那么可能值得进行预编译。

当然,如果它是一个非常大的应用程序,需要一段时间才能在第一次运行时编译,我会倾向于预编译,特别是如果它没有得到持续使用。


0
2018-06-15 15:21



我在本地Intranet上有许多ASP.net应用程序。所有这些都被部署为源代码。其中一些很少使用。但是在第一次编译之后,它们似乎总是很快出现。您是否有任何关于30分钟缓存超时的信息来源?我的经验似乎表明不是这样。 - recursive
应用程序池在20分钟后被回收,因此在此之后点击它意味着您获得启动/编译命中 - Sander Rijken
应用程序不是很大,实际上只是几页和程序集。我试图访问未预编译并刚刚部署的服务器上的一些。访问这些的时间是显而易见的(我一直在寻找它),但并不是那么糟糕。他们中的大多数人也没有看到很多访问权限。 - NetHawk
30分钟只是一个例子。我不知道默认缓存超时是什么。我注意到在我们的环境中,它似乎在那个球场。 - atfergs


主要优点是在webserver上编译性能。它也保护你的代码,因为从汇编中读取代码更难:-)


0
2018-06-15 15:23



保护您的代码免受谁的侵害?客户? - Chad Ruppert
实际上,Ishtar,使用Reflector反编译.NET程序集几乎是微不足道的。由于Web服务器不提供应该在ASP.NET中保护的文件,例如.cs文件和您的Web配置,这真的是一个很大的优势吗?我同意表演是最受欢迎的问题。感谢您的回答。 - NetHawk
每个程序都可以被反编译..但是阅读它会“更难”。如果您已发布未编译的项目,则任何人都可以直接阅读修改您的代码。 - Jan Remunda
我不确定这些陈述是否完全正确。 - NetHawk


我没有预编译上传文件: 这样,由于我的代码非常错误,我可以直接从服务器使用Notepad ++来纠正它

此外,Visual Web Developer 2008(免费版)没有编译选项:-P


0
2018-06-15 15:38