«Управление секретами пользователей» по правому клику доступно только в веб-проектах.
Существует несколько иной процесс для консольных приложений
Это требует ручного ввода необходимых элементов в файл csproj затем добавляя секреты через PMC
я описал процесс, который работал на меня в течении шаг за шагом проект в этом блоге:
https://medium.com/@granthair5/how-to-add-and-use-user-secrets-to-a-net-core-console-app-a0f169a8713f
Т.Л., д-р
Шаг 1
правой кнопкой мыши и проект попал редактировать Projectname.csproj
Шаг 2
добавить <UserSecretsId>Insert New Guid Here</UserSecretsId>
в csproj под TargetFramework
добавить <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0"/>
в группу товаров в csproj
Шаг 3
Открыть PowerShell (админ) CD в проект справочник и
введите dotnet user-secrets set YourSecretName "YourSecretContent"
Это создаст файл secrets.json в:
%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json
Где userSecretsId = новый Guid вы создали для csproj
Шаг 4
Открытые секреты .json и изменить, чтобы посмотреть похожие на
{
"YourClassName":{
"Secret1":"Secret1 Content",
"Secret2":"Secret2 Content"
}
}
Добавив имя своего класса, вы можете связать свои секреты с объектом, который будет использоваться.
Создайте базовый POCO с тем же именем, которое вы только что использовали в своем JSON.
namespace YourNamespace
{
public class YourClassName
{
public string Secret1 { get; set; }
public string Secret2 { get; set; }
}
}
Шаг 5
Добавить Microsoft.Extensions.Configuration.UserSecrets
NuGet пакет проецировать
Добавить
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddUserSecrets<YourClassName>()
.AddEnvironmentVariables();
&
var services = new ServiceCollection()
.Configure<YourClassName>(Configuration.GetSection(nameof(YourClassName)))
.AddOptions()
.BuildServiceProvider();
services.GetService<NameOfClass>();
В файл Program.cs.
Затем вводят IOptions<YourClassName>
в конструкторе класса
private readonly YourClassName _secrets;
public SecretConsumer(IOptions<YourClassName> secrets)
{
_secrets = secrets.Value;
}
Затем доступ секреты с помощью _secrets.Secret1;
Это подход, который мы использовали слишком, и он прекрасно работает. Он имеет дополнительное преимущество - быть наиболее совместимым подходом с (ожидаемым) исправлением, которое команда VS в конечном итоге сделает (при условии, что он будет работать так же, как и для веб-проектов). –