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

.NET 4.8升级Microsoft.Configuration.ConfigurationBuilders至3.0后读取用户密钥失效

.NET 4.8中Microsoft.Configuration.ConfigurationBuilders 3.0读取UserSecrets为空的解决方法

问题背景

我开发的.NET 4.8应用中,将Microsoft.Configuration.ConfigurationBuilders(包含Environment、Json、UserSecrets组件)从2.0版本升级到3.0版本后,出现UserSecrets读取失败的问题:

已更新app.config中的配置构建器声明:

<configBuilders>
    <builders>
      <add name="Environment" type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add name="Secrets" 
           userSecretsFile="./App_Data/secrets.xml" 
           mode="Greedy" 
           type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.UserSecrets, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>      
    </builders>
  </configBuilders>

secrets.xml文件结构:

<root>
<secrets ver="1.0">
    <secret name="App:UserKey" value="Hello World"/>
</secrets>
</root>

升级前2.0版本中,通过以下代码可以正常读取配置值:

var userKey = System.Configuration.ConfigurationManager.AppSettings["App:UserKey"];

但升级到3.0版本后,上述代码返回空字符串。尝试修改文件路径为~/App_Data/secrets.xml、调整secrets.xml为标准configuration格式均无效,切回2.0版本则恢复正常。

解决方法

  • 找到项目中的secrets.xml文件,右键打开属性面板
  • 将Copy to Output Directory属性从「Do not copy」修改为「Copy if newer」
  • 重新编译并运行应用,即可正常读取secrets.xml中的配置值

版本差异说明

排查后发现,3.0版本的UserSecretsConfigBuilder仅从应用程序的输出目录(例如\bin\Debug\net48\win7-x86\App_Data)加载secrets.xml文件;而2.0版本的组件支持直接从项目目录读取该文件,因此无需设置文件的复制属性。这一行为变更可能未在官方更新文档中明确记录,是导致升级后出现问题的原因。

内容的提问来源于stack exchange,提问作者Bug Hunter Zoro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:35:04