我已经在VS 2015中通过SSDT创建了一个发布配置文件,目标是SQL Azure V12服务器,现在我想使用控制台发布数据库。我使用以下命令:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
/t:Publish
/p:TargetDatabaseName=NEWDBNAME
/p:SqlPublishProfilePath="PublishProfiles\test.publish.xml"
"{PATH_TO_MY_SSDT\{PROJECTNAME}.sqlproj"
我的个人资料看起来像这样(花括号只是实际值的占位符):
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>DBNAME</TargetDatabaseName>
<DeployScriptFileName>Data.Database.sql</DeployScriptFileName>
<BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
<CreateNewDatabase>True</CreateNewDatabase>
<ProfileVersionNumber>1</ProfileVersionNumber>
<TargetConnectionString>Data Source={SERVER};Persist Security Info=True;User ID={USER};Password={PW};Pooling=False</TargetConnectionString>
</PropertyGroup>
<ItemGroup>
<SqlCmdVariable Include="BaseData">
<Value>1</Value>
</SqlCmdVariable>
<SqlCmdVariable Include="SampleData">
<Value>1</Value>
</SqlCmdVariable>
</ItemGroup>
</Project>
这会创建一个数据库&#34; DBNAME&#34;每次而不是使用值&#34; NEWDBNAME&#34;替换属性TargetDatabaseName
。其他一切都很好。
为什么msbuild会保持房产不变?
修改
我测试了一下并尝试了以下(在Christian K.s评论之后):
测试1:添加诊断
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
/t:Publish
/p:TargetDatabaseName=NEWDBNAME
/p:SqlPublishProfilePath="PublishProfiles\test.publish.xml"
"{PATH_TO_MY_SSDT\{PROJECTNAME}.sqlproj"
/v:diag
/fl
输出中有一个部分显示参数。这是截图:
测试2:更改UpdateDatabase以进行测试
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
/t:Publish
/p:TargetDatabaseName=NEWDBNAME
/p:SqlPublishProfilePath="PublishProfiles\test.publish.xml"
/p:UpdateDatabase=false
"{PATH_TO_MY_SSDT\{PROJECTNAME}.sqlproj"
/v:diag
/fl
如您所见,UpdateDatabase
已正确更改,TargetDatabaseName
未显示在属性列表中。
答案 0 :(得分:1)
让exec任务调用sqlpackage.exe真的要简单得多 - 我检查sqlpackage文件夹MSSQL \ VER \ DAC \ bin到我的解决方案中所以我可以使用build文件夹中的相对路径,你可以从任何部署有或没有SQL的服务器。
答案 1 :(得分:0)
我得到了解决方案。我只是将我的发布配置文件中的CreateNewDatabase
设置为false
,然后就可以了。
编辑:它只能运行一次,因为之后只是跳过了该过程,因为数据库已经存在。现在的解决方案是在我通过代码执行它之前编辑publish.xml,正如Kris在他的评论中所建议的那样。
这是SQL Server和SQL Azure之间不兼容的另一个示例,这在我看来很烦人。