2017-02-16 8 views
14

Когда я создаю новый ASP.NET Core Web -Приложение, я могу щелкнуть правой кнопкой мыши проект в Visual Studio, и я вижу запись контекстного меню под названием «Управление секретами пользователей».Как получить «Управление секретами пользователей» в консольном приложении .NET Core?

Когда я создаю новый .NET Core Консоль -Приложение, я не вижу эту запись в контекстном меню.

Однако в настройках проекта приложение «Веб» отображается как «консольное» приложение. Есть ли способ получить эту запись в контекстном меню в консольном приложении?

ответ

0

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

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

  1. Файл -> New->
  2. Выбор консольного приложения Project (.NET Ядро)
  3. Нажмите CTRL + ALT + L
  4. Нажмите на в проекте «Управление секретами пользователей» он откроет файл secrets.json

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

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

C: \ Projects \ ConsoleApp2 \ SRC \ ConsoleApp2> Dotnet пользовательских секреты набора BrainTree_sandbox: Merchant ID: 9rv9mhnb5gh7nnyx

3

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

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

Предполагая, что операционная система Windows

  1. Откройте Проводник файлов для 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

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

0

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

Что вы можете сделать до тех пор, пока они его не разрешат, заключается в использовании подхода командной строки, как описано в разделе Visual Studio Code or Command Line: Installing the Secret Manager tool. Это не означает, что вы получаете свой пункт контекстного меню, но тем не менее он работает.

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

3

Для меня я должен был добавить:

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

Затем установите

<PropertyGroup> 
    <UserSecretsId>a random user id: manually add</UserSecretsId> 
</PropertyGroup> 

перейти к папке миграции проекта в ПМЦ и добавить ключ: значение, как:

dotnet user-secrets set "ConnectionStrings:DefaultConnection" "xxxxx" 
0
  1. Щелкните правой кнопкой мыши по проекту и нажмите кнопку редактирования файла csproj.
  2. На первой линии заменить <Project Sdk="Microsoft.NET.Sdk"> на <Project Sdk="Microsoft.NET.Sdk.Web"> и сохранить.

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

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

5

«Управление секретами пользователей» по правому клику доступно только в веб-проектах.

Существует несколько иной процесс для консольных приложений

Это требует ручного ввода необходимых элементов в файл 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;

+0

Это подход, который мы использовали слишком, и он прекрасно работает. Он имеет дополнительное преимущество - быть наиболее совместимым подходом с (ожидаемым) исправлением, которое команда VS в конечном итоге сделает (при условии, что он будет работать так же, как и для веб-проектов). –

Смежные вопросы