Как получить "Управление секретами пользователей" в консольном приложении.NET Core?

Когда я создаю новую веб- страницу ASP.NET Core -Application, я могу щелкнуть правой кнопкой мыши проект в Visual Studio, и я вижу запись контекстного меню под названием "Управление секретами пользователей".

Когда я создаю новую.NET Core Console -Application, я не вижу эту запись в контекстном меню.

Тем не менее, "Веб" -Application отображается как "консольное" приложение в настройках проекта. Есть ли способ получить эту запись контекстного меню в консоли -Application?

Ответ 1

"Управление секретами пользователя" при нажатии правой кнопки мыши доступно только в веб-проектах.

В консольных приложениях процесс немного отличается

Для этого необходимо вручную ввести необходимые элементы в файл csproj, а затем добавить секреты через PMC

Я изложил процесс, который работал для меня в моем текущем проекте, шаг за шагом в этом сообщении в блоге:

https://medium.com/@granthair5/how-to-add-and-use-user-secrets-to-a-net-core-console-app-a0f169a8713f

ТЛ; др

Шаг 1

Щелкните правой кнопкой мыши проект и выберите команду edit projectName.csproj

.Шаг 2

добавить <UserSecretsId>Insert New Guid Here</UserSecretsId> в csproj под TargetFramework

добавить <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0"/> в группу товаров в csproj

Шаг 3

Откройте компакт-диск PowerShell (admin) в каталоге проекта и

введите dotnet user-secrets set YourSecretName "YourSecretContent"

Это создаст файл secretts.json в:

%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json

Где userSecretsId = новый Guid, который вы создали для своего csproj

Шаг 4

Откройте secrets.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<SecretConsumer>();

В ваш файл Program.cs.

Затем вставьте IOptions<YourClassName> в конструктор вашего класса

private readonly YourClassName _secrets;

public SecretConsumer(IOptions<YourClassName> secrets)
{
  _secrets = secrets.Value;
}

Затем получите доступ к секретам, используя _secrets.Secret1;


Спасибо Патрику за указание, что services.GetService<NameOfClass>(); должно быть services.GetService<SecretConsumer>();

Ответ 2

1.Добавить в файл проекта (только до версии dotnet 2.1):

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
 </ItemGroup>

2.Set

 <PropertyGroup>
     <UserSecretsId>a random user id: manually add</UserSecretsId>
 </PropertyGroup>
  1. Перейдите в папку проекта миграции в консоли диспетчера пакетов и добавьте ключ: значение, например:

    dotnet user-secrets set "ConnectionStrings:DefaultConnection" "xxxxx"
    

Не забудьте быть в каталоге этого проекта (для консоли диспетчера пакетов это означает cd'ing в проект, а не уровень решения)

Ответ 3

Manage User Secrets теперь доступен из контекстного меню проектов .NET Core Console (не только проектов ASP.NET Core) в Visual Studio 2019 (проверено в версии 16.1.3), если вы ссылаетесь на Microsoft.Extensions.Configuration.UserSecrets NuGet.

Ответ 4

Похоже, что они не добавили этого (по крайней мере, к Visual Studio 2015) в качестве опции для консольных или DLL-приложений.

Вы можете использовать это как работу, но делайте это на свой страх и риск, это обманет Visual Studio, полагая, что проект dll также имеет возможности Web.

Предполагая ОС Windows

  1. Откройте File Explorer для C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v{Version Number}\DotNet Примечание C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v{Version Number}\DotNet : 14.0 - это VS 2015, 15.0 - 2017 и т.д.

  2. резервное копирование файла с именем Microsoft.DotNet.targets

  3. Добавьте эту строку в Microsoft.DotNet.targets рядом с другим тегом ProjectCabability

    <ProjectCapability Include="DotNetCoreWeb"/>

  4. Сохраните файл, выгрузите и перезагрузите проект/перезапустите визуальную студию.

Вам также может потребоваться удалить ваш файл.suo и/или папку.vs

Теперь вы должны увидеть контекстное меню. К сожалению, он также меняет значок. Кажется, что это просто отлично, но это довольно непроверено так серьезно, используйте на свой страх и риск.

Ответ 5

На GitHub уже есть открытый закрытый вопрос, связанный с этим.

То, что вы можете сделать, пока они не решат проблему, это использовать подход командной строки, как описано в коде Visual Studio или в командной строке: установка инструмента Secret Manager. Это не значит, что вы получите свой пункт контекстного меню, но, тем не менее, он работает.

Одно примечание, документация ссылается на <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1"/> хотя версия 2.0.0 уже вышла и может использоваться.

Ответ 6

  1. Щелкните правой кнопкой мыши по проекту и нажмите править файл csproj.
  2. В первой строке замените <Project Sdk="Microsoft.NET.Sdk"> на <Project Sdk="Microsoft.NET.Sdk.Web"> и сохраните.

Теперь вы можете получить доступ к меню пользовательских секретов, отредактировать его и сохранить. Затем вам нужно восстановить первую строку файла csproj по умолчанию, чтобы снова стать консольным приложением.

Это глупо, но это работает. Помните, замените свойство usersecretsid для каждого проекта или просто получите один secrets.json для всех ваших проектов.

Ответ 7

В дополнение к ответам, опубликованным здесь, если вам нужна ссылка на ваш собственный файл secrets.json в вашем проекте, вы можете добавить следующий код в ItemGroup в вашем файле проекта:

<None Include="$(AppData)\microsoft\UserSecrets\$(UserSecretsId)\secrets.json" Link="secrets.json" />

Ответ 8

Как получить "Управление секретами пользователей" в консольном приложении.NET Core?

Использование сообщества Visual Studio 2015 с обновлением 3

  1. Файл → New-> Проект
  2. Выберите Консольное приложение (.NET Core)
  3. Нажмите CTRL + ALT + L
  4. Нажмите на проект, чтобы получить "Управление секретами пользователей", он откроет файл под названием secrets.json

и где вы можете вручную вводить пользовательские секреты.

Я смог использовать командную строку для настройки секретов пользователей:

c:\Projects\ConsoleApp2\src\ConsoleApp2> набор пользовательских секретов dotnet BrainTree_sandbox: идентификатор продавца: 9rv9mhnb5gh7nnyx