How to get “Manage User Secrets” in a .NET Core console-application?

前端 未结 9 1362
醉梦人生
醉梦人生 2020-12-28 12:07

When I create a new ASP .NET Core Web-Application, I can right-click the project in Visual Studio, and I see a context-menu entry called \"Manage User Secre

相关标签:
9条回答
  • 2020-12-28 12:17

    "Manage user secrets" from a right click is only available in web projects.

    There is a slightly different process for console applications

    It requires manually typing the required elements into your csproj file then adding secrets through the PMC

    I have outlined the process that worked for me in my current project step by step in this blog post :

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

    tl;dr

    Step 1

    Right click project and hit edit projectName.csproj

    Step 2

    add <UserSecretsId>Insert New Guid Here</UserSecretsId> into csproj under TargetFramework

    add <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0"/> within Item Group in csproj

    Step 3

    Open PowerShell (admin) cd into project directory and

    enter dotnet user-secrets set YourSecretName "YourSecretContent"

    This will create a secrets.json file in:

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

    Where userSecretsId = the new Guid you created for your csproj

    Step 4

    Open secrets.json and edit to look similar to this

    {
     "YourClassName":{
        "Secret1":"Secret1 Content",
        "Secret2":"Secret2 Content"
       }
    } 
    

    By adding the name of your class you can then bind your secrets to an object to be used.

    Create a basic POCO with the same name that you just used in your JSON.

    namespace YourNamespace
    {
        public class YourClassName
        {
            public string Secret1 { get; set; }
            public string Secret2 { get; set; }
        }
    }
    

    Step 5

    Add Microsoft.Extensions.Configuration.UserSecrets Nuget package to project

    Add

    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>();
    

    To your Program.cs file.

    Then inject IOptions<YourClassName> into the constructor of your class

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

    Then access secrets by using _secrets.Secret1;


    Thanks to Patric for pointing out that services.GetService<NameOfClass>(); should be services.GetService<SecretConsumer>();

    0 讨论(0)
  • 2020-12-28 12:19

    How to get “Manage User Secrets” in a .NET Core console-application?

    Using Visual Studio 2015 Community with update 3

    1. File -> New-> Project
    2. Select Console Application (.NET Core)
    3. Press CTRL+ALT+L
    4. Click on the project to get “Manage User Secrets” it will open up a file called secrets.json

    and where you can manually enter user-secrets.

    I was able to use command prompt to setup user secrets:

    c:\Projects\ConsoleApp2\src\ConsoleApp2>dotnet user-secrets set BrainTree_sandbox:Merchant ID:9rv9mhnb5gh7nnyx

    0 讨论(0)
  • 2020-12-28 12:21

    There is already an open closed issue related to this on GitHub.

    What you can do until they solve it, is to use the command line approach as described on Visual Studio Code or Command Line: Installing the Secret Manager tool. This doesn't mean that you get your context menu item but it works nevertheless.

    One note, the documentation is referring to <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" /> while version 2.0.0 is already out and can be used.

    0 讨论(0)
  • Dotnet Core 3.1 - simplest method I have found in situations when I just need to hide a password.
    Create user secrets using command line from project folder

    dotnet user-secrets init
    dotnet user-secrets set mailpassword password1
    

    in Program.cs

    var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
                
    var secretProvider = config.Providers.First();
    if (!secretProvider.TryGet("mailpassword", out var secretPass) ) return;
    

    If you are doing more things with configuration you may need to adjust the .First()

    0 讨论(0)
  • 2020-12-28 12:35

    1.Add to your project file (Prior to dotnet 2.1 only):

    <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. Move to the migration project folder in Package Manager Console and add a key:value like:

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

    Remember to be in the directory of that project (for Package manager console this means cd'ing into the project, not solution level)

    0 讨论(0)
  • 2020-12-28 12:38
    1. Right click on the project and click edit csproj file.
    2. On first line replace <Project Sdk="Microsoft.NET.Sdk"> with <Project Sdk="Microsoft.NET.Sdk.Web"> and save.

    Now you can access to manage user secrets menu, edit it and save. Then you have to restore the first line of the csproj file to its defaults to be again a console app.

    It's stupid but it works. Remember replace the usersecretsid property for every project or will just have one secrets.json for all your projects.

    0 讨论(0)
提交回复
热议问题