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

如何阻止MSBuild发布多个数据库,msbuild,sql-server-data-tools,Msbuild,Sql Server Data Tools,我有一个visual studio 2017解决方案,由两个SSDT项目组成——一个是我正在处理的主要项目,一个是包含链接对象的项目,主要项目需要“数据库引用”来编译 在主项目上单击鼠标右键并发布时,VisualStudio仅将主项目正确发布到目标服务器 但是,当我在CI服务器(TeamCity)上运行MSBuild任务时,我可以看到MSBuild正在尝试使用主项目的publish.xml来发布引用的项目(我不希望如此)(这没有任何意义!) 如何让MSBuild只发布我关心的数据库? 命令行是:

我有一个visual studio 2017解决方案,由两个SSDT项目组成——一个是我正在处理的主要项目,一个是包含链接对象的项目,主要项目需要“数据库引用”来编译

在主项目上单击鼠标右键并发布时,VisualStudio仅将主项目正确发布到目标服务器

但是,当我在CI服务器(TeamCity)上运行MSBuild任务时,我可以看到MSBuild正在尝试使用主项目的publish.xml来发布引用的项目(我不希望如此)(这没有任何意义!)

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

命令行是:

      msbuild.exe /t:Publish /p:SqlPublishProfilePath="MYDB.DROPANDCREATE.publish.xml" 
MYDB.DROPANDCREATE.publish.xml如下所示-它通过SqlCmd变量“暗指”引用的数据库。但这肯定不足以让MSBuild决定发布它吗

那么,让msbuild只发布MYDB并停止尝试发布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>

真的
MYDB
MYDB.sql
数据源=MYSERVER;综合安全=真实;持久安全信息=False;池=假;MultipleActiveResultSets=False;连接超时=60;加密=假;TrustServerCertificate=True
假的
真的
真的
1.
真的
引用数据库名
REFERENCESERVERNAME
TeamCity日志:

[13:42:00][Step 2/2]MySln.sln.teamcity:构建目标:teamcity\u生成\u构建;发布(1m:05s)

[13:42:00][MySln.sln.teamcity]teamcity生成的构建(1m:05s)

[13:42:01][TeamCity\u生成的\u构建]MSBuild(1m:04s)

[13:42:02][MSBuild]MySln.sln:生成目标:重新生成;发布(1m:03s)

[13:42:02][MySln.sln]验证解决方案配置

[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]发布(14秒)

[13:42:52][Publish]MSBuild(14s)

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

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

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

[13:43:03][SqlPublishTask]部署脚本已生成到: C:\BuildAgent\work\6BBA3047716A590\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\6BBA3047716A590\ReferenceDB\bin\Release\ReferenceDB.publish.sql错误部署72002:无法打开源文件“C:\BuildAgent\work\6BBA3077716A590\ReferenceDB\MYDB.DROPANDCREATE.publish.xml”(“系统找不到指定的文件”)。

好,我想我现在就知道了

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做这件事,所以我自己并没有形成完整的命令行,所以我以前没有想到这一点。不管怎样,现在一切都好了