【问题标题】:ASP.NET WebSite Publishing vs. Copying?ASP.NET 网站发布与复制?
【发布时间】:2012-12-15 16:01:05
【问题描述】:

我在发布时遇到了很多问题,例如当您需要对代码进行小的更改时,有时生成的 DLL 文件(例如发布时的 default.aspx.CS 的 dll 文件)无法被 IIS 识别,并说代码隐藏是错的什么的。很抱歉没有记住确切的错误信息。我希望你现在明白我的意思。

因此,我通常做一个简单的Copy Paste 操作而不是Publishing。

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

基本上这是一个利弊的情况。

谢谢

【问题讨论】:

  • 发布也受您选择部署的应用程序类型的影响; Web 站点应用程序允许您只发布一些文件,而 Web 应用程序通常需要将 ASPX 和适当的 DLL 部署到正确的文件夹。阅读stackoverflow.com/questions/398037/… 了解更多信息。
  • 感谢您的评论。但这并不能完全帮助我。例如,是否有任何性能差异?或许,可以概括为“做网络应用而不是发布网站”

标签: asp.net web publishing


【解决方案1】:

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

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

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

我建议您使用local publish,这样您就可以看到您的服务器上实际需要什么。发布到本地文件系统/文件夹的文件需要在您的主机/服务器上。这样做将可视化并消除 Publishing 的任何“神秘”:

  • 您会看到(在您的服务器上)实际需要什么与不需要什么
  • 您会看到文件时间戳,这将帮助您识别哪些文件实际更改了哪些文件没有更改(因此不需要更新)。
  • 一旦掌握了窍门,您就无需“复制”/ftp“所有内容”,只需更新实际修改过的文件(仅)。

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

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

【讨论】:

  • 你的回答很详细,说明你很清楚部署过程。但是,我想澄清一件事:我认为知道实际需要更新哪个文件是件好事;但是,当我的团队更新网站时,我会更新整个网站,而不仅仅是替换一些 DLL……这种方式可行,但容易受到人为错误的影响。我更喜欢将整个经过测试的应用程序上传到 IIS,解压缩,然后将 IIS 指向新文件夹。你觉得怎么样?
  • @HoàngLong 恕我直言,这就像“ftp 一切”。 Ftp 一切都不太容易出现其他问题 - 例如这些新文件夹的应用程序权限、网络场/复制问题等。此外,如果您对服务器具有直接/裸机访问权限,这种方法似乎只有可能/可行。另一种方法是WebDeploy,它以“智能方式”为您做事(为您找出变化)。如果您可以使用,那值得研究。
  • 是的,它几乎就像“ftp everything”(除了它不会有多余的文件,因为整个 web 应用程序文件夹都被替换了)。不过,WebDeploy 似乎是一个有趣的选择......我会玩它
  • 仅供参考,在切换到 Microsoft 堆栈之前,我会更多地了解 Java Web 应用程序。在我以前的“工作方式”中,首选单包部署:将整个 Web 应用程序放入一个 WAR 文件中,只需将其放入文件夹中即可。 WAR 文件易于版本化和跟踪。如果部署后发生错误,可以通过替换 WAR 文件轻松恢复网站。只是为我的新手问题提供一些背景知识:)
  • @HoàngLong 明白了 - 任何工作/有意义:) 过去做过类似的事情。将网站“打包”到版本化的msi。因此,就像任何软件“更新”一样(卸载旧版本/安装新版本)。如果需要回滚,只需“重新安装”以前的版本即可。
【解决方案2】:

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

  1. 您可以将两者都复制到 iis。 aspx 将在第一次请求时编译为 .cs,然后两个 .cses 都将编译为临时 .dll
  2. 您可以“发布”到 iis,这会将类后面的代码编译为 .dll,但会原封不动地复制 aspx。 aspx 将在第一次请求时转换为 .cs,然后转换为 .dll
  3. 您可以“发布”该站点,然后使用 aspnet_compiler 手动对其进行预编译。发布将像以前一样将后面的代码编译为 .dll,但随后预编译将通过删除 .aspx 文件的内容并将编译后的代码移动到另一个 .dll 来清除您的 .aspx 文件。

这三种模式各有利弊。

第一个最容易以增量方式更新,但同时最容易受到不必要的修改。

第二个也很简单,可以从 vs 中调用,它消除了服务器上一些不需要的修改的可能性,但是 .aspxses 在第一次请求时仍然需要时间来编译

第三个需要时间和一些手动操作,但可以防止任何更改,还可以加快网站的预热,因为不需要编译资产。它非常适合共享环境。

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2011-09-25
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多