首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从dbproj文件内部调用VSDBCMD

从dbproj文件内部调用VSDBCMD
EN

Stack Overflow用户
提问于 2012-02-18 00:10:45
回答 2查看 706关注 0票数 0

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

代码语言:javascript
复制
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目标包含进来时

代码语言:javascript
复制
 <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>

生成失败,并显示

代码语言:javascript
复制
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.

消息。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-20 18:32:56

我设法解决了这个问题。基本上是这样做的

代码语言:javascript
复制
<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)....where my VersionedSchemasv1.0.dbschema等不存在。诀窍是保持工作目录与ProjectDirectory相同,并仍然调用VSDBCMD。我做到了这一点

代码语言:javascript
复制
<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;" />

诀窍是在C:\Pro周围使用& quot;

票数 1
EN

Stack Overflow用户

发布于 2012-04-30 04:30:46

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

MSBuild任务可能如下所示:

代码语言:javascript
复制
<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" />
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9331642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档