代码之家  ›  专栏  ›  技术社区  ›  ubienewbie

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

  •  1
  • ubienewbie  · 技术社区  · 6 年前

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

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

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

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

    命令行是:

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

    MYDB。DROPANDCREATE。出版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\u Generated\u Build;发布(1m:05秒)

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

    [13:42:01][TeamCity\u Generated\u Build]MSBuild(1m:04s)

    [13:42:02][MSBuild]MySln。sln:构建目标:重建;发布(1m:03s)

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

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

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

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

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

    [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\work\6BBA3047716A590\MyDb\bin\Release\MyDb。出版sql

    [13:43:03][SqlPublishTask]正在创建MYDB。。。

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

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

    [13:43:06][MSBuild]ReferencedDb\ReferencedDb。sqlproj:生成目标:发布

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

    [13:43:06][SqlPublish]SqlPublishTask

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   ubienewbie    6 年前

    好吧,我想我现在明白了。。。

    C: \用户\x598144\source>msbuild .\迈斯林。SLN公司 /p: S qlPublishProfilePath=“MYDB.DROPANDCREATE.publish.xml”/t:发布

    ... 尝试发布两个数据库。鉴于

    C: \用户\x598144\source>msbuild .\MyDb\MyDb。项目 /p: S qlPublishProfilePath=“MYDB.DROPANDCREATE.publish.xml”/t:发布

    ... 只是发布了我关心的一个。

    我想,因为我在TeamCity做这件事,我自己实际上并没有形成完整的命令行,所以我以前没有想到这一点。不管怎样,现在一切都好了!