8

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

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

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

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

谢谢

4

2 回答 2

16

好吧,这取决于您所说的“复制”是什么意思:

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 需要动态编译)。此外,您还将在服务器上公开您的源代码。根据您的情况,这可能意义不大,但这是要考虑的另一件事。

这是有关预编译和选项的更多信息

于 2012-12-31T15:14:09.673 回答
6

假设我们考虑一个 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 在第一次请求时仍然需要时间来编译

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

于 2012-12-31T16:00:02.823 回答