如何阻止MSBuild发布多个数据库

时间:2018-01-26 14:29:06

标签: msbuild sql-server-data-tools

我有一个视觉工作室2017解决方案,包含2个SSDT项目 - 一个是我正在处理的主要项目,一个是包含主要项目需要“数据库引用”进行编译的链接对象的项目。 p>

当我在主项目上右键单击并发布时,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] [Step 2/2] MySln.sln.teamcity:构建目标:TeamCity_Generated_Build;发布(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:构建目标:重建;发布(1m:03s)

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

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

[13:42:02] [Rebuild] MSBuild(49s)

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

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

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

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

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

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

[13:43:03] [SqlPublishTask]生成的部署脚本: C:\ BuildAgent \工作\ 6bba30477716a590 \ MYDB \ BIN \发布\ 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'无法打开('系统无法找到指定的文件。')。

1 个答案:

答案 0 :(得分:1)

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

C:\ Users \ x598144 \ source&gt; msbuild 。\ MySln.SLN / p:S qlPublishProfilePath =&#34; MYDB.DROPANDCREATE.publish.xml&#34; /吨:发布

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

C:\ Users \ x598144 \ source&gt; msbuild 。\ MyDb \ MyDb.PROJ / p:S qlPublishProfilePath =&#34; MYDB.DROPANDCREATE.publish.xml&#34; /吨:发布

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

我想是因为我在TeamCity中这样做了,我自己并没有真正形成完整的命令行,所以我之前没有想过这个。无论如何,现在一切都好!