當不應期望 secrets.json 檔案時,在 CI/CD 管道中生成用戶機密錯誤。
腳步:
創建 .NET 5 專案 添加了用戶機密。代碼在本地和 CI/CD 管道中運行。升級到 .NET 6 專案(并預覽 NuGet 6.* 包) 代碼在本地運行,但在 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
uj5u.com熱心網友回復:
與環境變數不同,用戶機密被放置在類似于appsettings.json. 當您需要在檔案之間復制鍵和值時,擁有類似的結構化專案外設定非常有用,并且支持添加、洗掉和列出值,我將在本文后面向您展示。
要了解用戶機密,讓我們繼續上一篇文章中的示例。在那里我有一個appsettings.json看起來像這樣的檔案:
{
"AppSettings": {
"ConnectionString": "http://localhost:9000"
},
...
}
為了覆寫AppSettings:ConnectionString單個機器上的設定,每個用戶都需要添加一個同名的用戶密碼。最簡單的方法是右鍵單擊專案并選擇Manage User Secrets:

這將創建并打開一個名為 .json 的新空 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>
如果您不使用 Visual Studio,您可以生成一個隨機 GUID 并<UserSecretsId>手動添加。
如果要覆寫AppSettings:ConnectionString設定,請向secrets.json檔案添加類似的結構:
{
"AppSettings": {
"ConnectionString": "http://localhost:9000?user=mehdidaustany&password=1234"
}
}
您還可以像這樣折疊設定:
{
"AppSettings:ConnectionString": "http://localhost:9000?user=mehdidaustany&password=1234"
}
最后secrets.json在專案的根目錄中添加 created 。
uj5u.com熱心網友回復:
https://github.com/dotnet/runtime/issues/48485
基本上,這是 .NET6 中的一項新功能,默認情況下“secrets.json”不是可選的!
AddUserSecrets(this IConfigurationBuilder configuration, Assembly assembly, bool optional);
該“可選”引數應在您的代碼中設定為“true”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363149.html
