Вызов VSDBCMD из файла dbproj - PullRequest
       40

Вызов VSDBCMD из файла dbproj

0 голосов
/ 17 февраля 2012

У меня есть стандартный проект SQL Server 2008, который был создан с использованием vs2010.Я пытался изменить процесс сборки так, чтобы в конце запускалась пользовательская задача, которая вызывала бы VSDBCMD для генерации сценария развертывания, сравнивая выходные данные сборки (файл dbschema) со статическим файлом DBschema.Когда я запускаю эту команду из командной строки VS2010

vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:obj\Release\EnterpriseBuild.Services.Database.dbschema /targetmodelfile:VersionedSchemas\v1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase="EnterpriseBuild.Database"

Все отлично работает, и генерируется файл newdeployment.sql.Однако, когда я изменяю свой файл .dbproj и включаю его в качестве цели AfterBuilds

 <Target Name="AfterBuild">
    <!--<Message Text="sample text" Importance="high"></Message>-->
    <Exec IgnoreExitCode="false"  
          WorkingDirectory="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy\" 
          Command="vsdbcmd.exe /a:deploy /dd:- /model:obj\Release\EnterpriseBuild.Services.Database.dbschema /targetmodelfile:VersionedSchemas\v1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase=&quot;EnterpriseBuild.Database&quot;" />
  </Target>

, сборка завершается с сообщением

EnterpriseBuild.Services.Database.dbproj(211,5): error MSB3073: The command "vsdbcmd.exe /a:deploy /dd:- /model:obj\Release\EnterpriseBuild.Services.Database.dbschema /targetmodelfile:VersionedSchemas\v1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase="EnterpriseBuild.Database"" exited with code 1.

.

Может кто-нибудь предложить чтоЯ делаю не так?

Ответы [ 2 ]

3 голосов
/ 30 апреля 2012

Visual Studio также предоставляет $ (VSTSDBDirectory) - расположение VSDBCMD

Задача MSBuild может выглядеть следующим образом:

<Exec Command="&quot;$(VSTSDBDirectory)\Deploy\VSDBCMD&quot; /a:Deploy /q+ /dd:+ /dsp:sql /manifest:&quot;$(OutDir)Database.deploymanifest&quot; /cs:&quot;Integrated Security=SSPI;Persist Security Info=False;Data Source=(local)&quot; /p:AlwaysCreateNewDatabase=true /p:CommentOutSetVarDeclarations=false /p:TargetDatabase=&quot;MyDatabase&quot; /Script:&quot;$(OutDir)MyDatabase.sql&quot;" ContinueOnError="false" />
1 голос
/ 20 февраля 2012

Мне удалось это решить.По существу,

<Target Name="AfterBuild">
    <!--<Message Text="sample text" Importance="high"></Message>-->
    <Exec IgnoreExitCode="false"  
          WorkingDirectory="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy\" 
          Command="vsdbcmd.exe /a:deploy /dd:- /model:obj\Release\EnterpriseBuild.Services.Database.dbschema /targetmodelfile:VersionedSchemas\v1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase=&quot;EnterpriseBuild.Database&quot;" />
  </Target>

правильно устанавливает рабочий каталог в C: \ Program Files (x86) .... где моя VersionedSchemas \ v1.0.dbschema и т. Д. Не существуетХитрость заключалась в том, чтобы сохранить рабочий каталог таким же, как ProjectDirectory, и при этом вызывать VSDBCMD.Мне удалось это сделать, выполнив

<Exec IgnoreExitCode="false" Command="&quot;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy\vsdbcmd&quot;  /a:deploy /dd:- /model:obj\Release\EnterpriseBuild.Database.dbschema /targetmodelfile:VersionedSchemas\v1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase=&quot;EnterpriseBuild.Database&quot;" />

Хитрость заключалась в том, чтобы использовать & quot;вокруг C: \ Pro ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...