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

netstandard2.0环境下T4模板读取appsetting.json配置的解决方案咨询

你当前的ConfigurationManager返回null的核心原因是:T4模板执行时的运行上下文与你的项目上下文隔离,默认读取的是T4执行引擎的宿主配置(比如Visual Studio的devenv.exe配置、dotnet t4命令的运行时配置),不会自动加载你项目目录下的app.config、appsettings.json等配置文件。

方案1:手动加载项目配置文件(适配netstandard2.0)

该方案无需修改模板调用逻辑,直接在模板内加载项目下的配置文件,同时支持流水线直接替换配置文件内容。
首先需要在你的项目中提前安装两个适配netstandard2.0的NuGet包:

  • System.Configuration.ConfigurationManager (适配传统.config格式配置文件)
  • Microsoft.Extensions.Configuration.Json (适配json格式配置文件,更推荐)

修改后的T4模板示例如下:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="netstandard" #>
<#@ assembly name="System.Configuration.ConfigurationManager" #>
<#@ assembly name="Microsoft.Extensions.Configuration" #>
<#@ assembly name="Microsoft.Extensions.Configuration.Json" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="Microsoft.Extensions.Configuration" #>
<#
    // 拿到当前模板所在的项目根目录
    var templateDir = Host.ResolvePath(".");
    // 定位项目下的appsettings.json文件,可根据实际路径调整
    var configPath = Path.Combine(templateDir, "appsettings.json");
    
    // 加载配置
    var config = new ConfigurationBuilder()
        .AddJsonFile(configPath, optional: false, reloadOnChange: false)
        .Build();
    
    // 读取连接字符串
    var connString = config.GetConnectionString("YourConnStringKey");
    // 读取自定义配置节点
    var myVariable = config["MyConfigSetting"];
#>
// 后续接你的代码生成逻辑
方案2:Runtime模板外部传参(更适合流水线场景)

Runtime Templates生成的类是partial类,你可以直接扩展类添加参数,把连接字符串从外部传入,完全不需要在模板内部读取配置,流水线执行时可以直接读取流水线变量传入,避免配置文件读取的兼容性问题。
操作步骤如下:

  1. 模板无需引入配置相关的程序集,直接定义公共属性接收参数:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#+
    // 定义公共属性接收外部传入的配置值
    public string ConnectionString { get; set; }
    public string MyConfigSetting { get; set; }
#>
// 生成代码时直接调用上述属性即可
<#
    var connString = this.ConnectionString;
    var myVariable = this.MyConfigSetting;
#>
  1. 调用模板生成代码的地方直接传参即可:
var template = new YourTemplateGeneratedClassName();
// 此处可读取流水线变量、项目配置等任意来源的配置值传入
template.ConnectionString = "你的数据库连接字符串";
template.MyConfigSetting = "其他自定义配置值";
// 执行生成逻辑
string generatedCode = template.TransformText();
// 把生成的代码写入目标.cs文件即可
流水线替换适配说明
  • 如果使用方案1,直接使用流水线的配置文件替换任务,替换appsettings.json里对应的连接字符串节点即可,和普通.NET项目的配置替换逻辑完全一致。
  • 如果使用方案2,直接在流水线执行模板生成的步骤中,把流水线中存储的连接字符串敏感变量作为参数传入即可,不需要修改任何文件内容,安全性更高。

内容的提问来源于stack exchange,提问作者Marcos Varela Alonso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:09:03