You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置SSDT单元测试项目的app.config以支持AzureDevOps管道ServicePrincipal认证?

适配Azure DevOps管道的ServicePrincipal认证配置方案

针对你的SSDT单元测试项目,无需修改本地已有的app.config,可以通过配置变换或管道变量替换实现本地与Azure DevOps环境的认证隔离,具体方案如下:

方案一:使用配置变换文件(推荐)

这种方式可以为不同环境维护独立的配置片段,避免本地与管道配置冲突:

  1. 添加管道专用配置变换文件
    在项目中创建app.AzureDevOps.config(或复用app.Release.config),内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <connectionStrings>
        <!-- 替换为服务主体认证的连接字符串 -->
        <add name="MyDbConnection" 
             connectionString="Server=tcp:你的数据库服务器名.database.windows.net,1433;Database=你的数据库名;Authentication=Active Directory Service Principal;Encrypt=True;User Id=$(ServicePrincipalClientId);Password=$(ServicePrincipalSecret);" 
             providerName="System.Data.SqlClient" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
      </connectionStrings>
    </configuration>
    

    注:如果使用旧版System.Data.SqlClient,可能需要将Authentication值改为Active Directory Password,同样配合服务主体的ID和密钥。

  2. Azure DevOps管道配置

    • 在管道库中添加两个秘密变量:ServicePrincipalClientId(服务主体的客户端ID)、ServicePrincipalSecret(服务主体的密钥)
    • 添加File Transform任务,设置:
      • Transform files:**/app.AzureDevOps.config
      • XML transformation rules:**/app.config
    • 后续执行SSDT测试任务时,会自动使用变换后的配置。

方案二:管道变量直接替换占位符

这种方式无需额外配置文件,通过占位符+管道变量实现动态替换:

  1. 修改主app.config为占位符格式
    保留本地兼容的占位符,同时支持管道替换:

    <connectionStrings>
      <add name="MyDbConnection" 
           connectionString="Server=tcp:你的数据库服务器名.database.windows.net,1433;Database=你的数据库名;Authentication=$(AuthType);Encrypt=True;User Id=$(ServicePrincipalClientId);Password=$(ServicePrincipalSecret);" 
           providerName="System.Data.SqlClient" />
    </connectionStrings>
    
  2. 本地开发时覆盖占位符
    创建App.config.user文件(这个文件不会提交到版本库),覆盖为本地交互式认证配置:

    <connectionStrings>
      <add name="MyDbConnection" 
           connectionString="Server=tcp:你的数据库服务器名.database.windows.net,1433;Database=你的数据库名;Authentication=Active Directory Interactive;Encrypt=True;" 
           providerName="System.Data.SqlClient" />
    </connectionStrings>
    
  3. Azure DevOps管道配置

    • 添加管道变量:
      • AuthType = Active Directory Service Principal
      • ServicePrincipalClientId(秘密变量)= 服务主体客户端ID
      • ServicePrincipalSecret(秘密变量)= 服务主体密钥
    • 在测试任务(如VSTest或DotNetCoreCLI test)中启用XML variable substitution选项,管道会自动替换配置文件中的$(变量名)占位符。

关键注意事项

  • 确保服务主体已被授予目标Azure SQL数据库的访问权限(需在数据库中创建对应用户并分配角色,如db_datareader/db_datawriter)
  • 管道中的秘密变量需设置为“保密”状态,避免敏感信息泄露
  • 若使用Microsoft.Data.SqlClient最新版本,需确认Authentication参数值为Active Directory Service Principal,部分旧版本可能需要用Active Directory Password

内容的提问来源于stack exchange,提问作者R. Maier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:10:23