Sqlproj:在命令行中部署数据库的解决方案是什么?

JM8*_*M89 1 deployment msdeploy vsdbcmd sqlproj sqlpackage

我目前正在使用Microsoft Web部署技术(msbuild和msdeploy命令)将网站部署到服务器.该网站需要部署数据库,两者都在同一台服务器上.我正在寻找部署数据库项目(使用命令行)的最佳解决方案,我想更好地了解有关数据库部署的所有技术.

解决方案的内容(Visual Studio 2013):

  • 一个数据库项目(适用于SQL Server 2008),
  • 一个类库(带有NHibernate的数据访问层)
  • 一个Web项目(ASP.NET MVC4).

注意:我没有自愿使用VS中的持续集成/交付工具或发布方法.我这个项目的第一个目标是了解msbuild/msdeploy如何工作......

我看了一下vsdbcmd命令,它似乎做了我想要的所有步骤......除了我需要将Visual Studio DLLs /文件导入我的远程服务器,我想知道是否有更好的方法......我也看了在msdeploy提供程序dbSqlPackage/dbDacFx,但据我所知,它使用dacpac来应用架构更改.同样,SqlPackage.exe似乎也使用dacpac.

使用dacpac听起来不错,但我对以下问题感到困惑:

  • 这是否意味着我第一次创建数据库时需要一个不同的进程?如果是,哪个命令最好?
  • 是否可以从我的sqlproj文件创建一个dacpac?如果是的话,该怎么办?

是否有其他方法可以从命令行以及您的经验和项目进行部署,部署此类项目的最佳方式是什么?

非常感谢,

JM8*_*M89 7

通过进一步的研究,我发现Visual Studio在构建sqlproj(bin/Debug或bin/Release取决于你的构建配置)时创建了一个dacpac.第一次部署时,dacpac会创建您的数据库.当您进行架构更改时,它似乎应用它们.

这里是网站和数据库命令行的总结:

网站建设

msbuild %fullpathwebcsproj% /P:Configuration=Release /T:Package
Run Code Online (Sandbox Code Playgroud)

网站部署(默认应用程序池)

msdeploy -verb:sync -source:package=%fullpathpackage% -dest:auto
Run Code Online (Sandbox Code Playgroud)

%fullpathpackage%:当/ T:包在那里时由msbuild创建的zip文件的路径(bin/Release)

数据库构建:

msbuild %fullpathsqlproj% /P:Configuration=Release 
Run Code Online (Sandbox Code Playgroud)

数据库部署:

msdeploy -verb:Sync -Source:dbDacFx=%fullpathdacpac% -Dest:dbDacFx=%connectionstring%
Run Code Online (Sandbox Code Playgroud)

这个解决方案现在让我满意.尽管如此,我仍然愿意接受改进的意见和建议.