从dbproj文件内部调用VSDBCMD



我有一个标准的sql server 2008项目,它是使用vs2010创建的。我一直在尝试修改构建过程,以便在最后激发一个自定义任务,该任务将调用VSDBCMD,通过将构建的输出(dbschema文件)与静态dbschema文件进行比较来生成部署脚本。当我从VS2010命令提示符运行此命令时

vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:objReleaseEnterpriseBuild.Services.Database.dbschema /targetmodelfile:VersionedSchemasv1.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.0VSTSDBDeploy" 
          Command="vsdbcmd.exe /a:deploy /dd:- /model:objReleaseEnterpriseBuild.Services.Database.dbschema /targetmodelfile:VersionedSchemasv1.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:objReleaseEnterpriseBuild.Services.Database.dbschema /targetmodelfile:VersionedSchemasv1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase="EnterpriseBuild.Database"" exited with code 1.

消息。

有人能指出我做错了什么吗?

Visual Studio还公开了VSDBCMD 的$(VSTSDBDirectory)位置

MSBuild任务可能如下所示:

<Exec Command="&quot;$(VSTSDBDirectory)DeployVSDBCMD&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" />

我设法解决了这个问题

<Target Name="AfterBuild">
    <!--<Message Text="sample text" Importance="high"></Message>-->
    <Exec IgnoreExitCode="false"  
          WorkingDirectory="C:Program Files (x86)Microsoft Visual Studio 10.0VSTSDBDeploy" 
          Command="vsdbcmd.exe /a:deploy /dd:- /model:objReleaseEnterpriseBuild.Services.Database.dbschema /targetmodelfile:VersionedSchemasv1.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.0VSTSDBDeployvsdbcmd&quot;  /a:deploy /dd:- /model:objReleaseEnterpriseBuild.Database.dbschema /targetmodelfile:VersionedSchemasv1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase=&quot;EnterpriseBuild.Database&quot;" />

诀窍是使用&quot;围绕C:\Pro。。。

最新更新