注释掉设置Var声明True会导致MS Build出错

时间:2012-12-17 15:04:15

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

我正在努力自动化SSDT项目的脚本,以便稍后可以使用传入的变量的替代值进行部署。

我的发布资料看起来像这样。

<?xml version="1.0" encoding="utf-8"?>
  <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <IncludeCompositeObjects>True</IncludeCompositeObjects>
     <TargetConnectionString>Data Source=.;Integrated Security=True;Pooling=False</TargetConnectionString>
     <TargetDatabaseName>BLANK</TargetDatabaseName>
     <UpdateDatabase>False</UpdateDatabase>
     <ScriptDatabaseOptions>True</ScriptDatabaseOptions>
     <BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
     <CreateNewDatabase>True</CreateNewDatabase>
     <IgnoreObjectPlacementOnPartitionScheme>False</IgnoreObjectPlacementOnPartitionScheme>
     <ProfileVersionNumber>1</ProfileVersionNumber>
     <CommentOutSetVarDeclarations>True</CommentOutSetVarDeclarations>
   </PropertyGroup>
 </Project>

在我的测试脚本中,我从powershell

调用以下内容
$Directory = 'C:\GitProjects\CI\DevPOC\Database\ETL POC\AdventureWorksDW\'
$Publish = 'AdventureWorksDW.publish.xml'

Set-Location $Directory
& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Build
& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Publish /p:SqlPublishProfilePath`="$Directory\$Publish"

然后我得到了许多与变量值有关的错误,例如下面的例子。

Deploy error SQL72014: SQL Execution error: A fatal error occurred. The variable DatabaseName could not be found.  [C:\GitProjects\CI\POC\Database\ETL POC\AdventureWorksDW\AdventureWorksDW.sqlproj]

但是,如果我将CommentOutSetVarDeclarations设置为false,则生成的脚本没有错误。通过SSDT执行相同任务时,不会产生任何错误。

有没有人经历过类似的行为?

1 个答案:

答案 0 :(得分:2)

因此,经过微软支持的一些来回,我有一个解决这个问题的方法。似乎不会以这种方式拾取和使用发布配置文件中设置的参数UpdateDatabase。不是100%确定这是否被确认为错误,但通过使用以下命令,它可以正常工作。

& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Publish /p:SqlPublishProfilePath`="$Directory\$Publish" /p:UpdateDatabase=False