您如何部署 .NET Web 应用程序?(请推荐!)

Dja*_*rdt 10 iis deployment web-server web-applications visual-studio

我们最近将我们的 ASP.NET网站升级为Web 应用程序,我们对部署时突然出现的困难感到震惊。考虑到这是一项多么普遍的任务,我想知道人们使用什么插件/软件来部署快速发展的远程存储项目(即网站)?

除了在Visual Studio 中“发布”然后必须手动 FTP 已更改的文件之外,一定有更好的方法吗?尤其是因为当我们上传我们的 .DLL 时网站会宕机。

有太多繁琐的文件异常,我必须尽可能地自动化该过程,以防止意外上传。

使用我们的旧解决方案(在我们的网站上),我们使用Dispatch for ASP,它完全震撼了整个过程,只需单击一下。不幸的是,它对 DLL 来说不是很好(如前所述)。

那么你的团队是如何做到的呢?

感谢您的任何建议。

PS - 我已经读到 Visual Studio 2010 应该解决 VS2005/08 中的这些缺点,但在那之前......

Jas*_*tts 5

我强烈推荐使用持续集成。

我们结合使用TeamCity for CI、RakeAlbacore来自动化构建。

TeamCity 将从您的源代码存储库中检出代码,然后使用 Rake 构建应用程序、执行单元测试,甚至如果您愿意,甚至可以运行您的数据库脚本。成功构建后,您可以将源代码打包到 zip 文件中或将其复制到您选择的目的地。

我们使用 Git,尽管 TeamCity 适用于所有源代码控制系统。

使用 TeamCity 和 Rake 类似于使用 CruiseControl 和 NANT,无需编辑 XML 文件。当然,如果您愿意,您可以将 TeamCity 与 NANT 结合使用。

从执行构建的 rakefile.rb 中提取的简短示例。恕我直言,比 XML 文件更容易阅读和调试。

require 'albacore'
require 'rexml/document'
require 'find'

VERSION_NO = "1.0"

OUTPUT_PATH = "output"
WEBOUTPUT_PATH = "output/web"
ADMINOUTPUT_PATH = "output/admin"

CONFIG = "Release"

WEB_PATH = "app/Company.Website.Web"
ADMIN_PATH = "app/Company.Website.Admin"
PACKAGE_PATH = "build/package"
DB_SCRIPT_PATH = "Company.Website.DB"
SOLUTION = "Company.Website.sln"

ARTIFACTS_PATH = "d:/build/artifacts/"

DEPLOY_WEB_PATH = "d:/deploy/company/website/"
DEPLOY_ADMIN_PATH = "d:/deploy/company/admin/"

task :default => ['setuptest','assemblyinfo','config','msbuild','createdb','sqlcmd','deploy']


task :setuptest do |setup|
  if ENV['BuildNumber'].nil? then ENV['BuildNumber'] = "000" end

  VERSION_NO = VERSION_NO + '.' + ENV['BuildNumber']
  puts 'Version Number : ' + VERSION_NO

  ZIPFILE_WEB = 'Company.Website.Web.' + VERSION_NO
  ZIPFILE_ADMIN = 'Company.Website.Admin.' + VERSION_NO  

  DB_SERVER = "WEB2"
  DB_DATABASE = "Website"  
  CREATEDB_SCRIPT = "app/Company.Website.DB/00CreateDatabaseTEST.sql"
end

  assemblyinfotask do |asm|
    asm.version = VERSION_NO
    asm.company_name = "Company Name"
    asm.copyright = "Copyright 2010"
    asm.output_file = "CommonAssemblyInfo.cs"
  end

  task :config do
    FileUtils.cp 'NHibernate.test.config', 'NHibernate.config'
  end

  msbuildtask do |msb|
    msb.properties = { :configuration => :Debug }
    msb.targets [:Clean, :Build]
    msb.solution = "Company.Website.sln"
  end

  sqlcmdtask :createdb do |sql|
    puts "executing sql scripts..."
    sql.log_level = :verbose
    sql.path_to_command = "sqlcmd.exe"
    sql.server = DB_SERVER
    sql.database = "master"
    sql.scripts << CREATEDB_SCRIPT
  end

  sqlcmdtask do |sql|
    puts "executing sql scripts..."
    sql.log_level = :verbose
    sql.path_to_command = "sqlcmd.exe"
    sql.server = DB_SERVER
    sql.database = DB_DATABASE
    sql.scripts << "app/Company.Website.DB/01CreateTables.sql"
    sql.scripts << "app/Company.Website.DB/02InsertReferenceData.sql"
  end

  task :deployprep do

    FileUtils.remove_dir 'app/Company.Website.Web/obj'
    FileUtils.remove_dir 'app/Company.Website.Admin/obj'

  end

  ziptask :zipweb do |zip|
    puts "creating zip package in " + ZIPFILE_WEB
    zip.directories_to_zip = ["app/Company.Website.Web"]
    zip.output_file = ZIPFILE_WEB  + '.zip'
    zip.output_path = File.dirname(__FILE__)
  end

  ziptask :zipadmin do |zip|
      puts "creating zip package in " + ZIPFILE_ADMIN
    zip.directories_to_zip = ["app/Company.Website.Admin"]
    zip.output_file = ZIPFILE_ADMIN  + '.zip'
    zip.output_path = File.dirname(__FILE__)
  end  
Run Code Online (Sandbox Code Playgroud)

Albacore 是专门为部署 .NET 应用程序而构建的 Rake 任务套件。