Visual studio 2010 从dbproj文件内部调用VSDBCMD
我有一个标准的SQLServer2008项目,它是使用vs2010创建的。我一直在尝试修改构建过程,以便在最后触发一个自定义任务,该任务将调用VSDBCMD,通过将构建(dbschema文件)的输出与静态dbschema文件进行比较来生成部署脚本。当我从VS2010命令提示符运行此命令时Visual studio 2010 从dbproj文件内部调用VSDBCMD,visual-studio-2010,sql-server-2008,vsdbcmd,Visual Studio 2010,Sql Server 2008,Vsdbcmd,我有一个标准的SQLServer2008项目,它是使用vs2010创建的。我一直在尝试修改构建过程,以便在最后触发一个自定义任务,该任务将调用VSDBCMD,通过将构建(dbschema文件)的输出与静态dbschema文件进行比较来生成部署脚本。当我从VS2010命令提示符运行此命令时 vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:obj\Release\EnterpriseBuild.Services.Database.dbschema /targe
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文件并将其作为后构建目标包含时
<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="EnterpriseBuild.Database"" />
</Target>
信息
有人能指出我做错了什么吗?我设法解决了这个问题。基本上是这样做的
<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="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.0\VSTSDB\Deploy\vsdbcmd" /a:deploy /dd:- /model:obj\Release\EnterpriseBuild.Database.dbschema /targetmodelfile:VersionedSchemas\v1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase="EnterpriseBuild.Database"" />
诀窍是使用;大约在C:\Pro…我设法解决了这个问题。基本上是这样做的
<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="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.0\VSTSDB\Deploy\vsdbcmd" /a:deploy /dd:- /model:obj\Release\EnterpriseBuild.Database.dbschema /targetmodelfile:VersionedSchemas\v1.0.dbschema /DeploymentScriptFile:NewDeploymentScript.sql /p:TargetDatabase="EnterpriseBuild.Database"" />
诀窍是使用;Visual Studio还公开了VSDBCMD的$(VSTSDBDirectory)-位置 MSBuild任务可能如下所示:
<Exec Command=""$(VSTSDBDirectory)\Deploy\VSDBCMD" /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" />
Visual Studio还公开了$(VSTSDBDirectory)-VSDBCMD的位置 MSBuild任务可能如下所示:
<Exec Command=""$(VSTSDBDirectory)\Deploy\VSDBCMD" /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" />