当不应预期有 Secrets.json 文件时,CI/CD 管道中会生成用户机密错误。
脚步:
代码在本地运行,但在 CI/CD 管道中失败,并出现错误:
“找不到配置文件‘secrets.json’并且不是可选的。”
预期的:
代码在没有 Secrets.json 文件的情况下运行配置 .NET 6,Microsoft.Extensions.Configuration.UserSecrets:6.0.0-preview.1.21102.12
回归?这适用于 .NET 5,Microsoft.Extensions.Configuration.UserSecrets:5.0.0.*
System.IO.FileNotFoundException: The configuration file 'secrets.json' was not found and is not optional. The physical path is '/home/runner/work/UserSecretsRegression/UserSecretsRegression/UserSecrets/UserSecrets.Tests/bin/Release/net6.0/secrets.json'.
Stack Trace:
at Microsoft.Extensions.Configuration.FileConfigurationProvider.HandleException(ExceptionDispatchInfo info)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at UserSecrets.Tests.UnitTest1.TestMethod1() in /home/runner/work/UserSecretsRegression/UserSecretsRegression/UserSecrets/UserSecrets.Tests/UnitTest1.cs:line 13
Run Code Online (Sandbox Code Playgroud)
Nei*_*eil 51
https://github.com/dotnet/runtime/issues/48485
基本上,这是 .NET6 中的一个新功能,默认情况下“secrets.json”不是可选的!
AddUserSecrets(this IConfigurationBuilder configuration, Assembly assembly, bool optional);
Run Code Online (Sandbox Code Playgroud)
该“可选”参数应在代码中设置为“true”。
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddCommandLine(args)
.AddJsonFile("appsettings.json")
.AddUserSecrets<Program>(true)
.Build();
Run Code Online (Sandbox Code Playgroud)
与环境变量不同,用户机密放置在类似于appsettings.json. 当您需要在文件之间复制键和值时,拥有类似的结构化项目外设置非常有用,并且支持添加、删除和列出值,我将在本文后面向您展示。
为了了解用户机密,让我们继续上一篇文章中的示例。在那里我有一个appsettings.json如下所示的文件:
{
"AppSettings": {
"ConnectionString": "http://localhost:9000"
},
...
}
Run Code Online (Sandbox Code Playgroud)
为了覆盖AppSettings:ConnectionString各个计算机上的设置,每个用户都需要添加具有相同名称的用户密码。最简单的方法是右键单击该项目并选择Manage User Secrets:
这将创建并打开一个名为 的新空 JSON 文件secrets.json。该文件位于与您的 Windows 用户匹配的C:\Users\<username>\AppData\Roaming\Microsoft\UserSecrets\<id>位置下方<username>,并且是随机生成的 GUID。这里需要注意的重要一点是该文件位于项目目录之外。为了将secrets.json文件位置“绑定”到您的项目,Visual Studio 在文件中添加了一些标记csproj:
<PropertyGroup>
<UserSecretsId>dda25df4-9a88-4a7e-8502-2134b74e4729</UserSecretsId>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
如果您不使用 Visual Studio,您可以生成随机 GUID 并<UserSecretsId>手动添加。
如果您想覆盖该AppSettings:ConnectionString设置,请向文件添加类似的结构secrets.json:
{
"AppSettings": {
"ConnectionString": "http://localhost:9000?user=mehdidaustany&password=1234"
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以像这样折叠设置:
{
"AppSettings:ConnectionString": "http://localhost:9000?user=mehdidaustany&password=1234"
}
Run Code Online (Sandbox Code Playgroud)
最后添加secrets.json在项目根目录中创建的内容。
| 归档时间: |
|
| 查看次数: |
20634 次 |
| 最近记录: |