2009-08-04 9 views
6

のVisual Studio 2008のデータベースプロジェクト2008導入前

プロジェクトは、導入前と展開後のSQLスクリプトのプレースホルダを持っています。彼らはうまくいく - とにかくほとんどの時間。

プロジェクトには、常に再作成 - データベースオプションがあります。既存のデータベースを削除し、毎回新しいオーブン・オーブン・データベースを作成します。

データベースを展開すると、SQLスクリプト全体がまとめられて実行されます。

データベースはレプリケーションに使用され、デプロイ後スクリプトの一部として、サーバーをディストリビューションとして指定し、レプリケーションを作成して記事を追加します。

したがって、私は複製を停止する必要があります。それを置く論理的な場所はPre-Deployでした。

VS2008は、私の顔のほほ笑みをかなり素早く拭きました。 Always-Recreate-Databaseがチェックされている場合、スクリプトはデータベースを削除して再作成してから、私のプレデプロイメントスクリプトを入れ、それ以外はすべてを入れます。

データベースプロジェクトのテンプレートを変更して、デプロイ前のSQLスクリプトを実行する場所(実行する場所、つまりデプロイメント前)で実行する方法はありますか。

+0

の外観を与えるためにも試してみてください。 –

答えて

3

これは正確にはあなたの後ろではないかもしれませんが、問題を回避するのに役立つかもしれません。すばやく見てから、展開前スクリプトと展開後スクリプトの順序を変更するのは難しいかもしれないと思います。

私が理解しているように、デプロイメントが始まる前に独自のコードを実行できるビルドプロジェクトにはいくつかのフックがあります。

  1. .dbprojファイルにPreDeployEventプロパティを定義します。
  2. .dbprojファイルにBeforeDeployターゲットを定義します。

いずれかの時点で適切な時点で実行する必要があります。

PreDeployEventプロパティを使用する場合は、実行するコマンドラインを1つ指定する必要があります。粗製の例:

<PropertyGroup> 
    <PreDeployEvent>sqlcmd.exe -i myscript.sql</PreDeployEvent> 
</PropertyGroup> 

あなたはより多くの制御をしたい場合は、1つのまたは 複数のカスタムMSBuildのタスクを実行できるようになりますBeforeDeployターゲットを使用しています。ここでは別の粗製の例を示します:

<Target Name="BeforeDeploy"> 
    <Message Text="BeforeDeploy" Importance="high" /> 
</Target> 

ところで、自由に利用できるカスタムタスク、www.msbuildextensionpack.comにあるものであることの一例がたくさんあります。

+0

私はPropertyGroupをプロジェクトのあらゆる場所に配置しようとしましたが、これまで何も機能していませんでした。あなたが知っているサンプルはありますか? –

+1

http://pastie.org/575352 - 最初の数行で十分です。 VSTS2008のデプロイ後に出力ウィンドウを確認します。デプロイの前後にデータベースが存在するという出力が表示されます(DBがドロップされて再作成される前にコマンドが実行されたことを示します)。 –

関連する問題