ASP.NET WebSite发布与复制?

时间:2012-12-31 14:03:00

标签: asp.net web publishing

我遇到了许多与发布有关的问题,例如当您需要对代码进行细微更改时,有时生成的DLL文件(发布时为default.aspx.CS的dll文件)无法被IIS识别代码隐藏是错误的。很抱歉没有记住确切的错误消息。我希望你知道我的意思。

因此,我通常会执行简单的Copy Paste操作,而不是发布。

你可以告诉我不使用Publish方法我错过了什么吗?出版如何更好?或者您更喜欢哪一个,为什么?

基本上是利弊情况。

三江源

2 个答案:

答案 0 :(得分:14)

嗯,这取决于你所说的“复制”:

使用Publishing,您可以选择pre-compile全部或部分应用。您可以publish到文件系统中的本地文件夹(而不是目标/主机),然后复制更新的文件(仅限)。如果您正在修改“代码隐藏”(c#/ vb代码),这意味着您可能只需要“复制”/覆盖dlls。不言而喻,如果您对“内容”更改(html / razor / script / etc)进行了更改,那么您还需要复制/覆盖这些更改。

如果您不熟悉部署,您可能会发现自己只是复制/覆盖“一切”,这是最安全的方式。获得更多经验后,您将“识别”您只需要更新哪些资产(一个或几个dlls和/或内容代码,而不是“一切”)。通常情况下,只需在published(本地)或rebuild您的网络应用程序后查看dll /文件的时间戳即可。

我建议您执行local publish,以便了解服务器上实际需要的内容。发布到本地文件系统/文件夹的文件是您的主机/服务器上需要的文件。这样做将可视化并删除Publishing所带来的“神秘感”:

  • 你会看到实际需要的东西(在你的服务器上)与不是
  • 的东西
  • 您将看到文件时间戳,它将帮助您识别实际更改的文件与未更改的文件(因此不需要更新)。
  • 一旦掌握了它,就不需要“复制”/ ftp“所有内容”,只需更新实际修改过的文件(仅限)。

所以“复制”可能意味着上述内容,或者如果您说您只是将所有开发代码(原始(vb/cs)html/cs/vb)复制到您的主机,那么这意味着您的网站将是dynamically compiled因为需要/请求每个资源(没有pre-compiled)。同样“简单”,但你确实失去了pre-compilation,这意味着每个网页被请求/需要时会有延迟(ASP.net需要动态编译)。此外,您还在服务器上公开源代码。根据您的情况,这可能并不重要,但还有一件事需要考虑。

这里有更多info on pre-compilation and options

答案 1 :(得分:6)

假设我们考虑一个aspx页面及其aspx.cs代码隐藏文件,有三种替代方法来部署您的站点:

  1. 您可以将两者都复制到iis。 aspx将在第一次请求时编译为.cs,然后两个.cses将被编译为temp .dll
  2. 您可以“发布”到iis,这会将类后面的代码编译为.dll,但会复制aspx未触及。 aspx将在第一次请求时翻译为.cs然后转换为.dll
  3. 您可以“发布”该网站,然后使用aspnet_compiler手动预编译它。发布会像以前一样将代码编译成.dll,但是预编译将通过删除内容并将编译后的代码移动到另一个.dll来清除.aspx文件。
  4. 这三种模式各有利弊。

    第一个是最容易逐步更新,但同时也是最容易被不必要的修改。

    第二个也很容易,可以从vs调用,它关闭了在服务器上进行一些不需要的修改的可能性,但.aspxses仍然需要时间来编译第一个请求

    第三种是花时间和一些手动操作但是可以防止任何变化,并且还可以加速网站的预热,因为不需要编译资产。它非常适合共享环境。