.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
相关产品推荐
相关产品推荐

