Предварительное развертывание в базе данных проекта - PullRequest
6 голосов
/ 04 августа 2009

Проект базы данных Visual Studio 2008 для SQL Server 2008

В проекте есть заполнители для сценариев SQL перед развертыванием и после развертывания. Они работают - ну, в большинстве случаев, в любом случае.

В проекте есть опция Always-Recreate-Database: удалить существующую базу данных и каждый раз создавать новую горячую базу данных.

Когда я развертываю свою базу данных, весь сценарий SQL собирается и выполняется.

Моя база данных используется для репликации, и как часть сценария после развертывания я назначаю сервер дистрибутивом, создаю репликацию и добавляю в него статьи.

Поэтому я должен отключить репликацию. И логичное место для этого было в Pre-Deploy.

VS2008 довольно быстро стер с лица самодовольную усмешку. Если флажок Always-Recreate-Database установлен, он помещает сценарий для удаления и повторного создания базы данных, затем помещает мой сценарий перед развертыванием и все остальное.

Можно ли как-нибудь изменить шаблон проекта базы данных, чтобы сценарии SQL перед развертыванием выполнялись там, где они должны выполняться - до любого развертывания .

Ответы [ 2 ]

4 голосов
/ 04 августа 2009

Это может быть не совсем то, что вы ищете, но это может помочь вам обойти вашу проблему. после быстрого взгляда я думаю, что последовательность сценариев до и после развертывания может быть слишком сложной для изменения.

Насколько я понимаю, в проекте сборки есть несколько ловушек, которые позволят вам выполнить собственный код до начала развертывания.

  1. Определите свойство PreDeployEvent в вашем файле .dbproj.
  2. Определите цель BeforeDeploy в вашем файле .dbproj.

Я думаю, что любое из этих действий должно быть выполнено в нужный момент времени.

Если вы используете свойство PreDeployEvent, вам нужно будет указать одну командную строку для выполнения. Грубый пример:

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

Если вы хотите больше контроля, используйте цель BeforeDeploy, которая позволит вам запустить один или больше пользовательских задач msbuild. Вот еще один грубый пример:

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

Между прочим, существует множество свободно доступных пользовательских задач, например, на www.msbuildextensionpack.com .

2 голосов
/ 07 октября 2009

Попробуйте также взглянуть на эту статью Предварительные сценарии развертывания

...