ssdt msbuild参数覆盖默认值

时间:2014-06-11 03:54:08

标签: msbuild tfsbuild team-build sql-server-data-tools

我尝试从Team Foundation传递参数值内置到SSDT项目中的SQL脚本中。 我在项目中添加了一个参数:$(PublishVersion) 在SQL脚本中使用它时,我在创建的脚本中得到结果值$(SqlCmdVar__1)..

Sqlproj文件: ...                     $(SqlCmdVar__1)            

MSBuild参数(两种不同的尝试):

/p:MSBuildMultiProc=false /t:Build /t:Publish /p:PublishVersion=123

/p:MSBuildMultiProc=false /t:Build /t:Publish /p:SqlCmdVar__1=456

编辑:我通过编辑xaml然后使用XmlPoke来实现它。如果有兴趣,我可以发布更多细节。

3 个答案:

答案 0 :(得分:2)

我调查了这一点,目前在发布期间加载SQLCMD变量的唯一受支持的方法是将它们保存在发布配置文件(.publish.xml)中。在团队基础构建服务器上,使用/ p:SqlPublishProfilePath参数指定相关配置文件的路径。

或者,如果您使用Deploy任务,您应该能够使用/ p:SqlCmdVariable = 123属性指定SQLCMD变量(我相信这应该有效但需要验证)。缺点是您需要指定发布任务不需要的额外属性,例如连接字符串。请注意,您可以通过检查MSBuild文件夹中的Microsoft.Data.Tools.Schema.SqlTask​​s.targets文件来查看每个任务的设置方式。这就是定义传递给每个任务的属性的原因。

最后,发布配置文件中的大多数其他变量都可以通过命令行覆盖,因此对SQLCMD varibles支持此变量是合法请求。我建议在https://connect.microsoft.com/SQLServer/feedback/CreateFeedback.aspx为此问题创建一个连接错误,并使用类别“开发人员工具(SSDT,BIDS等)”。这至少可以在产品团队的雷达上得到它。

答案 1 :(得分:1)

Lonny.Bastien(MSFT)有provided an answer:使用/ t:部署而不是/ t:发布。这使用了Project本身的内置Deploy操作。您必须编辑Project Properties / SQLCMD Variables以使用间接值(例如,请参见上面的链接)。此任务不采用发布配置,因此您必须提供所有参数。例如,SQLCMD覆盖:

<ItemGroup>
<SqlCmdVariable Include="BuildId">
  <DefaultValue>
  </DefaultValue>
  <Value>$(SqlCmdVar__1)</Value>
</SqlCmdVariable>

...和msbuild参数:

/t:Deploy /p:SqlCmdVar__1=BLDNUMBER  /p:TargetConnectionString="Data Source=SOMESERVER;Integrated Security=True;" /p:TargetDatabaseName=PUBLISH_DBNAME

答案 2 :(得分:0)

尝试使用/ Variables:PublishVersion = 123