我尝试设置TFS构建以部署到我的SQL Server Express实例,但MSBuild始终失败:
C:\ Builds \ 1 \ portal \ Deploy to 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
答案 0 :(得分:0)
首先尝试在Visual Studio中构建和部署项目,方法是右键单击并选择发布,然后选择配置文件或在构建代理上使用命令行(msbuild)。
如果问题与TFS定义有关,这将缩小范围。检查数据库服务器是否存在任何无效的DNS条目。在目标计算机上打开防火墙。还尝试将SSDT更新到最新版本。
更多解决方法可以在以下问题中查看类似错误:
答案 1 :(得分:0)
几个星期前我遇到了同样的问题,在我的情况下,在连接字符串中我们没有用户名和密码,因为我们使用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角色,并且用户是本地用户,我们更改为网络用户。我希望能帮助你。