发布数据库时,MSBuild忽略p-Switch

时间:2015-12-26 15:12:41

标签: msbuild azure-sql-database sql-server-data-tools

我已经在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

输出中有一个部分显示参数。这是截图:

Normal parameter output

测试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 was changed the correct way

如您所见,UpdateDatabase已正确更改,TargetDatabaseName未显示在属性列表中。

2 个答案:

答案 0 :(得分:1)

让exec任务调用sqlpackage.exe真的要简单得多 - 我检查sqlpackage文件夹MSSQL \ VER \ DAC \ bin到我的解决方案中所以我可以使用build文件夹中的相对路径,你可以从任何部署有或没有SQL的服务器。

答案 1 :(得分:0)

我得到了解决方案。我只是将我的发布配置文件中的CreateNewDatabase设置为false,然后就可以了。

编辑:它只能运行一次,因为之后只是跳过了该过程,因为数据库已经存在。现在的解决方案是在我通过代码执行它之前编辑publish.xml,正如Kris在他的评论中所建议的那样。

这是SQL Server和SQL Azure之间不兼容的另一个示例,这在我看来很烦人。