【问题标题】:TFS Build: Can't connect to the DatabaseTFS 构建:无法连接到数据库
【发布时间】:2018-04-08 11:09:20
【问题描述】:

我正在尝试设置 TFS 构建以部署到我的 SQL Server Express 实例,但 MSBuild 一直失败:

C:\Builds\1\portal\Deploy 到 Portal_Dev\bin\DB.publish.sql:无法连接到主服务器或目标服务器“Portal_Deploy_Dev”。您必须在主服务器或目标服务器“Portal_Deploy_Dev”中拥有具有相同密码的用户。

这是发布文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseName>Portal_Deploy_Dev</TargetDatabaseName>
    <DeployScriptFileName>CCA_DB.sql</DeployScriptFileName>
    <TargetConnectionString>Data Source=Machine\SQLEXPRESS;Integrated Security=True;User ID=username;Password=password;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False</TargetConnectionString>
    <ProfileVersionNumber>1</ProfileVersionNumber>
  </PropertyGroup>
</Project>

使用的命令行参数:

 /t:Build;Publish
 /p:SqlPublishProfilePath=..\DB\Publishing\Portal_Deploy_Dev.publish.xml

【问题讨论】:

  • 错误信息明确告诉您问题所在。您是否首先查看了错误消息指示的内容?
  • 是的,我尝试了各种发布方式,我仔细检查了凭据,用户确实可以在本地访问服务器,但是当我完成构建过程时它没有通过。

标签: sql-server tfs msbuild sql-server-data-tools


【解决方案1】:

首先尝试在 Visual Studio 中构建和部署项目,方法是右键单击并选择发布,然后选择配置文件或在构建代理上使用命令行 (msbuild)。

如果问题与 TFS 定义有关,这将缩小范围。检查数据库服务器是否有任何无效的 DNS 条目。打开目标机器上的防火墙。同时尝试将 SSDT 更新到最新版本。

更多故障排除方法,您可以查看以下问题中的类似错误:

【讨论】:

    【解决方案2】:

    几周前我遇到了同样的问题,在我的情况下,在连接字符串中我们没有用户名和密码,因为我们使用 Windows 身份验证连接到数据库,我的意思是当您选择连接时发布个人资料。

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <IncludeCompositeObjects>True</IncludeCompositeObjects>
        <TargetDatabaseName>MyDatabase</TargetDatabaseName>
        <DeployScriptFileName>MyDatabaseChanges.sql</DeployScriptFileName>
        <BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
        <IgnoreRoleMembership>True</IgnoreRoleMembership>
        <IgnorePermissions>True</IgnorePermissions>
        <ExcludeServerAuditSpecifications>True</ExcludeServerAuditSpecifications>
        <ExcludeServerRoleMembership>True</ExcludeServerRoleMembership>
        <ExcludeServerRoles>True</ExcludeServerRoles>
        <ExcludeUsers>True</ExcludeUsers>
        <ExcludeLogins>True</ExcludeLogins>
        <IgnoreUserSettingsObjects>True</IgnoreUserSettingsObjects>
        <ProfileVersionNumber>1</ProfileVersionNumber>
        <TargetConnectionString>Data Source=MyServer;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True</TargetConnectionString>
      </PropertyGroup>
    </Project>
    

    然后在 TFS 中,我们使用用户名和密码(作为 MSBuild 参数的一部分),

    /p:TargetUserName="$(user)" /p:TargetPassword="$(password)"
    

    我们正在使用该用户连接到数据库,现在错误已得到修复,只是将其赋予 TFS TargetUserName db_owner 角色,并且用户是本地用户,我们更改为网络用户。希望对你有帮助。

    【讨论】:

    • 我看到您只是在连接字符串中指向您的服务器,而我正在执行“Data Source=Machine\SQLEXPRESS;”我应该删除SQLExpress 部分吗?
    • 你手动创建了连接字符串???我的意思是,如果您在 VS 中创建发布配置文件,右键单击 dbproject -> 发布,为您打开一个对话框,其中一个选项是目标数据库连接 -> 编辑,然后选择与某个服务器上的数据库的连接带有一些身份验证。那是我做的,如果你做同样的事情并且把 \SQLEXPRESS 放在你身上,那是正确的,但如果这是你手动做的事情,我建议只输入服务器名称。
    猜你喜欢
    • 2013-07-10
    • 2022-01-27
    • 2014-08-06
    • 2019-03-21
    • 2020-07-04
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多