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

.NET 8升级后Visual Studio管理用户机密时重复生成文件,需同时配置csproj与程序集属性的问题求助

.NET 8升级后Visual Studio管理用户机密时重复生成文件,需同时配置csproj与程序集属性的问题求助

大家好,最近把项目升级到.NET 8后,遇到了一个关于用户机密(User Secrets)的奇怪问题,折腾了好一阵没找到根因,想请教下各位大佬。

先跟大家说下我的项目配置情况:

项目配置详情

全局配置文件 Directory.Build.props

<Project>
  <PropertyGroup>
    <TargetFramework>net8.0-windows</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <ImplicitUsings>enable</ImplicitUsings>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <Deterministic>false</Deterministic>
    <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
  </PropertyGroup>
</Project>

项目 .csproj 文件(简化版)

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <RootNamespace>MyProject.MyApp</RootNamespace>
    <AssemblyName>MyProject.MyApp</AssemblyName>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="..\..\AssemblyInfo.Solution.cs" Link="Properties\AssemblyInfo.Solution.cs" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="xxx" />
    <PackageReference Include="xxx" />
    <PackageReference Include="xxx" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Application\Application.csproj" />
    <ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />
  </ItemGroup>
  <ItemGroup>
    <InternalsVisibleTo Include="MyProject.MyAppde.IntegrationTests" />
  </ItemGroup>
</Project>

程序集信息文件

  • 每个项目独有的 AssemblyInfo.Project.cs:
using Microsoft.Extensions.Configuration.UserSecrets;

[assembly: UserSecretsId("3867c5c2-50b2-4e1a-a53b-c6488418344c")]
  • 全项目共享的 AssemblyInfo.Solution.cs:
using System.Reflection;

[assembly: AssemblyVersion("2.1.*")]
[assembly: AssemblyInformationalVersion("2.1")]

遇到的矛盾问题

在.NET 7的时候,我只需要在AssemblyInfo.Project.cs里配置UserSecretsId就能兼顾加载配置和VS管理机密文件两个场景,但升级到.NET 8后完全变了:

我分别测试了三种配置方式,结果如下:

  • 只在AssemblyInfo.Project.cs中配置UserSecretsId
    • 👍 应用启动时能正常加载对应机密文件里的配置值
    • 👎 右键项目选择「管理用户机密」时,VS会直接生成一个新的机密文件,根本不识别我已有的那个
  • 只在.csproj的<PropertyGroup>里添加<UserSecretsId>
    • 👎 应用启动时完全加载不到机密文件里的配置
    • 👍 右键选择「管理用户机密」时,VS能正确打开我已有的那个机密文件
  • 同时在.csproj和AssemblyInfo.Project.cs中配置同一个UserSecretsId
    • 👍 应用能正常加载配置
    • 👍 VS也能正确打开对应的机密文件

目前看来只有第三种方式能同时满足两个需求,但总感觉这种重复配置有点别扭。我怀疑问题出在Directory.Build.props里的<GenerateAssemblyInfo>false</GenerateAssemblyInfo>设置,但同样的配置在.NET 7里完全没问题,升级到8之后才出现这个情况。

有没有大佬遇到过类似的问题?或者能帮忙分析下.NET 8在用户机密这块做了什么变更,有没有更优雅的解决办法,不用在两个地方重复配置同一个ID?

备注:内容来源于stack exchange,提问作者Martin Teichler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:22:59