我有一个标准的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="EnterpriseBuild.Database"" />
</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.
消息。
有人能指出我做错了什么吗?
MSBuild任务可能如下所示:
<Exec Command=""$(VSTSDBDirectory)DeployVSDBCMD" /a:Deploy /q+ /dd:+ /dsp:sql /manifest:"$(OutDir)Database.deploymanifest" /cs:"Integrated Security=SSPI;Persist Security Info=False;Data Source=(local)" /p:AlwaysCreateNewDatabase=true /p:CommentOutSetVarDeclarations=false /p:TargetDatabase="MyDatabase" /Script:"$(OutDir)MyDatabase.sql"" 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="EnterpriseBuild.Database"" />
</Target>
正确地将工作目录设置为C:\Program Files(x86)。。。。其中我的VersionedSchemas\v1.0.dbschema等不存在。诀窍是保持工作目录与ProjectDirectory相同,并且仍然调用VSDBCMD。我通过做到了这一点
<Exec IgnoreExitCode="false" Command=""C:Program Files (x86)Microsoft Visual Studio 10.0VSTSDBDeployvsdbcmd" /a:deploy /dd:- /model:objReleaseEnterpriseBuild.Database.dbschema /targetmodelfile:VersionedSchemasv1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase="EnterpriseBuild.Database"" />
诀窍是使用";围绕C:\Pro。。。