首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将ASP.NET应用程序部署到实时服务器?

如何将ASP.NET应用程序部署到实时服务器?
EN

Stack Overflow用户
提问于 2009-07-17 13:30:13
回答 12查看 37.4K关注 0票数 105

我正在寻找不同的技术/工具,你用来部署一个ASP.NET web应用程序项目(而不是 ASP.NET网站)到生产?

我特别感兴趣的是,从持续集成构建服务器将二进制文件放到某个位置到第一个用户请求命中这些二进制文件这段时间之间发生的工作流。

  1. ,你是在使用一些特定的工具,还是只使用XCOPY?如何打包应用程序(ZIP、MSI等)?
  2. 首次部署应用程序时如何设置应用程序池和虚拟目录(是手动创建还是使用某种工具创建)?
  3. 当静态资源发生更改(CSS、JS或图像文件)时,是重新部署整个应用程序,还是仅重新部署修改后的资源?程序集/ASPX页更改时怎么办?
  4. 您是否跟踪给定应用程序的所有已部署版本,如果出现问题,您是否有将应用程序恢复到以前已知工作状态的过程?

请随时完成前面的列表。

下面是我们用来部署ASP.NET应用程序的方法:

  1. 我们将Web Deployment Project添加到解决方案中,并将其设置为构建IIS application
  2. We将安装项目(而不是ASP.NET web安装项目)添加到解决方案中,并将其设置为采用Web部署项目的输出。
  3. 我们添加自定义安装操作,在OnInstall事件中,我们运行自定义构建.NET程序集,该程序集使用System.DirectoryServices.DirectoryEntry在ASP.NET中创建应用程序池和虚拟目录(此任务仅在第一次部署应用程序时执行)。我们支持IIS中的多个网站、虚拟目录身份验证和设置应用程序池的标识。
  4. 我们在TFS中添加了一个自定义任务来构建安装项目(TFS不支持安装项目,因此我们必须使用devenv.exe来构建MSI )
  5. MSI安装在实时服务器上(如果存在MSI的早期版本,则它是第一个MSI
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-07-17 13:33:53

我们使用Setup Factory将所有代码部署到MSI中。如果需要更改,我们会重新部署整个解决方案。这听起来像是对css文件的过度杀伤力,但它绝对保持了所有环境的同步,并且我们确切地知道生产环境中是什么(我们以相同的方式部署到所有测试和uat环境)。

票数 25
EN

Stack Overflow用户

发布于 2009-07-17 13:38:52

我们对实时服务器进行滚动部署,所以我们不使用安装程序项目;我们有更像CI的东西:

  • “实时”构建-从认可的源(不是存储库的“头”)
  • (在它进行了备份之后;-p)
  • robocopy发布到临时服务器(“实时”,但不在F5群集中)
  • 最终验证在临时服务器上完成,通常使用“主机”黑客来模拟整个过程,就像使用possible
  • robocopy /L自动分发下一次“推送”中的更改列表一样,以提醒任何goofs
  • 作为计划进程的一部分,群集被循环,通过robocopy部署到群集中的节点(当节点不在群集中时)

robocopy自动确保仅部署更改。

Re的应用程序池等;我喜欢这是自动(see this question),但在目前它是手动的。不过,我真的很想改变这一点。

(我们有自己的数据中心和服务器场“现场”可能会有所帮助,所以我们不需要跨越太多障碍)

票数 19
EN

Stack Overflow用户

发布于 2010-07-22 03:12:45

我将大部分ASP.NET应用程序部署到Linux服务器上,并重新部署所有应用程序,即使是最小的更改。以下是我的标准工作流程:

  • 我在服务器上使用源代码存储库(如Subversion)
  • ,我有一个example)
  • Backs脚本,它执行以下操作:
    • 签出最新的代码
    • 执行构建(创建database
    • Deploys )
    • 将文件筛选到最基本的部分(删除hit

的代码文件将文件放到以当前日期命名的目录中的web服务器)如果deployment

  • Makes中包含新模式,则

  • 将更新数据库新安装默认安装,以便在下一个DLL中使用它

签出是使用Subversion的命令行版本完成的,构建是使用xbuild (类似于Mono项目的msbuild)完成的。大多数魔术都是在ReleaseIt中完成的。

在我的开发服务器上,我本质上是持续集成的,但在生产端,我实际上是通过SSH连接到服务器,并通过运行脚本手动启动部署。我的脚本被巧妙地命名为'deploy‘,这就是我在bash提示符下输入的内容。我很有创造力。不。

在生产环境中,我必须键入“deploy”两次:一次是签出、构建并部署到一个过时的目录,另一次是将该目录设置为默认实例。由于目录已经过时,我可以通过在相关目录中输入'deploy‘来恢复到以前的任何部署。

初始部署需要几分钟,恢复到以前的版本需要几秒钟。

对我来说,这是一个很好的解决方案,它只依赖于三个命令行实用程序(svn、xbuild和releaseit)、DB客户端、SSH和Bash。

我真的需要在某个时候更新CodePlex上的ReleaseIt副本:

http://releaseit.codeplex.com/

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1143274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档