【问题标题】:How to stop MSBuild from publishing multiple databases如何阻止 MSBuild 发布多个数据库
【发布时间】:2018-01-26 14:29:05
【问题描述】:

我有一个由 2 个 SSDT 项目组成的 Visual Studio 2017 解决方案 - 一个是我正在处理的主要项目,一个是包含链接对象的项目,主项目需要“数据库引用”才能编译。

当我在主项目上右键单击并发布时,Visual Studio 正确地将主项目发布到目标服务器。

但是,当我在 CI 服务器 (TeamCity) 上运行 MSBuild 任务时,我可以看到 MSBUILD 正在尝试使用发布来发布 引用 项目(我不想要)。 main 项目的 xml(这没有任何意义!)。

如何让 MSBuild 只发布我关心的数据库?

命令行是:

      msbuild.exe /t:Publish /p:SqlPublishProfilePath="MYDB.DROPANDCREATE.publish.xml" 

MYDB.DROPANDCREATE.publish.xml 看起来像这样 - 它通过 SqlCmd 变量“暗示”引用的数据库。但这肯定还不足以让 MSBuild 决定发布它吗?

那么,让 msbuild 发布 MYDB 并停止尝试的正确命令行是什么

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseName>MYDB</TargetDatabaseName>
    <DeployScriptFileName>MYDB.sql</DeployScriptFileName>
    <TargetConnectionString>Data Source=MYSERVER;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True</TargetConnectionString>
    <BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
    <CreateNewDatabase>True</CreateNewDatabase>
    <IncludeTransactionalScripts>True</IncludeTransactionalScripts>
    <ProfileVersionNumber>1</ProfileVersionNumber>
    <DeployDatabaseInSingleUserMode>True</DeployDatabaseInSingleUserMode>
</PropertyGroup>
<ItemGroup>
    <SqlCmdVariable Include="ReferencedDbVariableName">
      <Value>REFERENCEDDBNAME</Value>
    </SqlCmdVariable>
    <SqlCmdVariable Include="ReferecedServerVariableName">
      <Value>REFERENCESERVERNAME</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>

TeamCity 日志:

[13:42:00][步骤 2/2] MySln.sln.teamcity:构建目标:TeamCity_Generated_Build;Publish (1m:05s)

[13:42:00][MySln.sln.teamcity] TeamCity_Generated_Build (1m:05s)

[13:42:01][TeamCity_Generated_Build] MSBuild (1m:04s)

[13:42:02][MSBuild] MySln.sln:构建目标:Rebuild;Publish (1m:03s)

[13:42:02][MySln.sln] ValidateSolutionConfiguration

[13:42:02][MySln.sln] 重建 (49s)

[13:42:02][重建] MSBuild (49s)

[13:42:03][MSBuild] MyDb\MyDb.sqlproj:构建目标:重建(48 秒)

[13:42:52][MySln.sln] 发布(14 秒)

[13:42:52][发布] MSBuild (14s)

[13:42:52][MSBuild] MyDb\MyDb.sqlproj:构建目标:发布(13 秒)

[13:42:52][MyDb\MyDb.sqlproj] SqlPublish (13s)

[13:42:52][SqlPublish] SqlPublishTask (13s)

[13:43:03][SqlPublishTask] 部署脚本生成到: C:\BuildAgent\work\6bba30477716a590\MyDb\bin\Release\MyDb.publish.sql

[13:43:03][SqlPublishTask] 创建 MYDB...

[13:43:06][SqlPublishTask] 数据库更新的事务部分成功。

[13:43:06][SqlPublishTask] 更新完成。

[13:43:06][MSBuild] ReferencedDb\ReferencedDb.sqlproj:构建目标:发布

[13:43:06][ReferencedDb\ReferencedDb.sqlproj] SqlPublish

[13:43:06][SqlPublish] SqlPublishTask

[13:43:06][SqlPublishTask] C:\BuildAgent\work\6bba30477716a590\ReferencedDb\bin\Release\ReferencedDb.publish.sql 错误 Deploy72002: 源文件 'C:\BuildAgent\work\6bba30477716a590\ReferencedDb \MYDB.DROPANDCREATE.publish.xml' 无法打开('系统找不到指定的文件。')。

【问题讨论】:

    标签: msbuild sql-server-data-tools


    【解决方案1】:

    好的,我想我现在明白了......

    C:\Users\x598144\source>msbuild .\MySln.SLN /p:S qlPublishProfilePath="MYDB.DROPANDCREATE.publish.xml" /t:Publish

    ... 尝试发布这两个数据库。而....

    C:\Users\x598144\source>msbuild .\MyDb\MyDb.PROJ /p:S qlPublishProfilePath="MYDB.DROPANDCREATE.publish.xml" /t:Publish

    ...只发布我关心的那个。

    我猜是因为我在 TeamCity 中执行此操作,我自己并没有真正形成完整的命令行,所以我之前没有想到这一点。无论如何,现在一切都好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多