2012-12-31 53 views
6

我遇到很多与发布有关的问题,例如当您需要对代码进行小的更改时,有时生成的DLL文件(dll文件,例如default.aspx.CS发布时)无法被IIS识别,说明代码隐藏是错误的或一些东西。对不起,不记得确切的错误信息。我希望你知道我的意思。ASP.NET网站发布与复制?

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

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

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

三江源

+0

发布也受您选择部署的应用程序的类型影响; Web站点应用程序允许您只发布几个文件,而Web应用程序通常需要将ASPX和适当的DLL部署到正确的文件夹。阅读http://stackoverflow.com/questions/398037/asp-net-web-site-or-web-application获取更多信息。 – dash

+0

感谢您的评论。但这并不能完全帮助我。例如,是否有任何性能差异?也许,它可以被概括为“Do Web Application,而不是发布网站” –

回答

13

嗯,这取决于你的意思是“拷贝”的内容:

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

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

我建议你做一个local publish,这样你就可以看到服务器上真正需要的东西。发布到本地文件系统/文件夹的文件是主机/服务器上需要的文件。这样做将可视化和消除任何“神秘”有到Publishing

  • 你会看到什么是真正需要(在服务器上)与什么不
  • ,你会看到该文件timesstamps这将帮助您识别哪些文件实际发生了变化,而哪些文件没有变化(因此不需要更新)。
  • 一旦你掌握了它,你将不需要“复制”/ ftp“everything”,只需更新实际修改过的文件(仅)。

所以“拷贝”可能意味着以上,或者如果你的意思是你会简单地复制所有的开发代码(生(vb/cs)html/cs/vb)到你的主机,那么这意味着你的网站将dynamically compiled因为需要每个资源/要求(没有什么是pre-compiled)。也是“容易”,但你确实会丢失pre-compilation,这意味着当你的每个网页被请求/需要时(ASP.net需要动态编译)会有延迟。另外,您还将在服务器上显示您的源代码。根据你的情况,这可能没有多大意义,但还有一件事需要考虑。

这是更多info on pre-compilation and options

+0

你的答案是一个非常详细的答案,它告诉我你清楚地了解了部署过程。但是,我想澄清一件事:我认为很高兴知道哪些文件实际需要更新;然而,当我的团队更新网站时,我会更新整个网站,而不仅仅是替换一些DLL ......这种方式很有效,但容易出现人为错误。我宁愿将整个测试过的应用程序上传到IIS,将其解压缩,然后将IIS指向新文件夹。你怎么想? –

+0

@HoàngLong恕我直言,就像“ftp所有”一样。 Ftp一切都不太容易出现其他问题 - 例如应用程序在这些新文件夹上的权限,Web场/复制问题等。另外,如果您有直接/裸机访问服务器的权限,那么这种方法似乎是唯一可行的。另一种方法是'WebDeploy',它以一种“智能的方式”为你做事(指出你的变化)。如果它可以提供给你,这是值得研究的东西。 – EdSF

+0

是的,它几乎就像“ftp所有”(除了它不会有冗余文件,因为整个web应用程序文件夹被替换)。 WebDeploy似乎是一个有趣的选择,虽然...我会玩它 –

6

假设我们考虑的一个aspx页面和隐藏文件的aspx.cs代码中,有部署你的网站的三种方式:

  1. 你既可以复制到IIS。 aspx将在第一次请求时编译为.cs,然后这两个.cses将被编译为一个临时文件.dll
  2. 您可以“发布”到iis,这会将类后面的代码编译为.dll,但将复制aspx未触及。在第一次请求时,aspx将被转换为.cs,然后转换为.dll
  3. 您可以“发布”该网站,然后使用aspnet_compiler手动预编译该网站。发布会像之前一样将后面的代码编译为.dll,但随后预编译将清除您的.aspx文件,方法是删除其内容并将编译后的代码移至另一个.dll。

这三种模式都有各自的优缺点。

第一个是增量更新最容易,但同时也是最容易发生不必要的修改。

其次也很容易,可以从VS调用,它将关闭在服务器上的一些不需要修改的可能性,但.aspxses还需要时间在第一次请求

三所花费的时间和一些手动操作来编译但是可以防止任何变化,并且还可以加速网站的热身,因为资源编辑不是必需的。这对共享环境非常有用。

+0

非常感谢。 –