2

現在、Microsoft Web 配置テクノロジ (msbuild および msdeploy コマンド) を使用して Web サイトをサーバーに配置しています。Web サイトにはデータベースの配置が必要であり、両方が同じサーバーに配置されます。(コマンド ラインを使用して) データベース プロジェクトを展開するための最適なソリューションを探しています。データベース展開に関するすべてのテクノロジをよりよく理解したいと考えています。

ソリューションの内容(Visual Studio 2013):

  • データベース プロジェクト (SQL Server 2008 用)、
  • クラス ライブラリ (NHibernate を使用したデータ アクセス層)
  • Web プロジェクト (ASP.NET MVC4)。

注: VS で継続的インテグレーション/配信ツールまたはパブリッシュ メソッドを自発的に使用しているわけではありません。このプロジェクトでの私の最初の目標は、msbuild / msdeploy がどのように機能するかを理解することでした...

必要なすべての手順を実行しているように見えるvsdbcmdコマンドを見ました...ただし、Visual Studio DLL/ファイルをリモートサーバーにインポートする必要があり、より良い方法がないかどうか疑問に思います...私も見ましたmsdeploy プロバイダーdbSqlPackage /dbDacFx で、しかし私が理解したことから、スキーマの変更を適用するために dacpac を使用しています。同様に、SqlPackage.exe も dacpac を使用しているようです。

dacpac を使用するのは良い考えに思えますが、次の質問で混乱しています。

  • これは、データベースを初めて作成するときに別のプロセスが必要になるということですか? はいの場合、どのコマンドが最適ですか?
  • sqlproj ファイルから dacpac を作成することはできますか? はいの場合、それを行う方法は?

コマンド ラインから、また経験やプロジェクトからデプロイする他の方法はありますか?この種のプロジェクトをデプロイする最良の方法は何でしたか?

どうもありがとう、

4

2 に答える 2

9

さらに調査した結果、Visual Studio が sqlproj (ビルド構成に応じて bin/Debug または bin/Release) をビルドするときに dacpac を作成していることがわかりました。初めてデプロイすると、dacpac によってデータベースが作成されます。スキーマの変更を行うと、それらが適用されるようです。

以下は、Web サイトとデータベースのコマンド ラインの概要です。

ウェブサイトの構築

msbuild %fullpathwebcsproj% /P:Configuration=Release /T:Package

Web サイトの展開(既定のアプリケーション プール)

msdeploy -verb:sync -source:package=%fullpathpackage% -dest:auto

%fullpathpackage% : /T:Package が存在する場合に msbuild によって作成される zip ファイルのパス (bin/Release)

データベースの構築:

msbuild %fullpathsqlproj% /P:Configuration=Release 

データベースの展開:

msdeploy -verb:Sync -Source:dbDacFx=%fullpathdacpac% -Dest:dbDacFx=%connectionstring%

この解決策は今のところ私を満足させます。それにもかかわらず、私はまだコメントや改善のための提案を受け付けています.

于 2015-04-10T18:57:30.237 に答える
1

わかりましたので、.sqlproj ファイルは dacpac ファイルにコンパイルされます。これは基本的に、デプロイ前/デプロイ後のファイルを含む zip ファイルと、すべての SQL スクリプト (モデル) の内容を含む xml ファイルです。

msbuild を使用すると、DacFx API を使用して、dacpac の変更を比較し、SQL データベースに発行します。

msbuild を使用するか、DacFx API を自分で使用するか、通常は sqlpackage.exe を使用して dacpac を取得し、データベースと比較します。その後、スクリプトを生成して手動で実行するか、生成したスクリプトを実行できます。データベースを更新します。

要求された場合に変更されるすべてのものの展開レポートを生成するなど、sqlpackage を使用して他のことを行うことができます。

プロジェクトをビルドして dacpac を生成すると、出力ディレクトリに配置されます。

これはべき等であるため、何回実行しても、最初のインスタンスの後は常に同じ結果になります。コードを変更するたびに、dacpac をビルドしてデプロイします。データベースが存在しない場合は、存在する場合は、変更を展開するだけです。

于 2015-04-27T15:30:24.683 に答える