.net core 如何获得;“管理用户机密”;在.NET核心控制台应用程序中?

.net core 如何获得;“管理用户机密”;在.NET核心控制台应用程序中?,.net-core,asp.net-core-1.0,visual-studio-2017,.net Core,Asp.net Core 1.0,Visual Studio 2017,当我创建一个新的ASP.NET CoreWeb-应用程序时,我可以在Visual Studio中右键单击该项目,并看到一个名为“管理用户机密”的上下文菜单项 当我创建一个新的.NET核心控制台应用程序时,我没有看到这个上下文菜单项 但是,“Web”应用程序在项目设置中显示为“控制台”应用程序。有没有办法在控制台应用程序中获取此上下文菜单项 如何在.NET核心控制台应用程序中获取“管理用户机密” 使用Visual Studio 2015社区和更新3 文件->新建->项目 选择控制台应用程序(.NE

当我创建一个新的ASP.NET CoreWeb-应用程序时,我可以在Visual Studio中右键单击该项目,并看到一个名为“管理用户机密”的上下文菜单项

当我创建一个新的.NET核心控制台应用程序时,我没有看到这个上下文菜单项


但是,“Web”应用程序在项目设置中显示为“控制台”应用程序。有没有办法在控制台应用程序中获取此上下文菜单项

如何在.NET核心控制台应用程序中获取“管理用户机密”

使用Visual Studio 2015社区和更新3

  • 文件->新建->项目
  • 选择控制台应用程序(.NET核心)
  • 按CTRL+ALT+L
  • 单击该项目以获取“管理用户机密”,它将打开 名为secrets.json的文件
  • 以及您可以手动输入用户机密的位置

    我可以使用命令提示符设置用户机密:


    c:\Projects\ConsoleApp2\src\ConsoleApp2>dotnet用户机密集BrainTree\u沙盒:商户ID:9rv9mhnb5gh7nnyx

    看来他们还没有将其作为控制台或DLL应用程序的选项添加(至少添加到Visual Studio 2015中)

    您可以将此作为一种解决方法,但这样做的风险由您自己承担,这将欺骗Visual Studio,使其相信dll项目也具有Web功能

    假设Windows操作系统

  • 打开文件浏览器至
    C:\ProgramFiles(x86)\MSBuild\Microsoft\VisualStudio\v{Version Number}\DotNet
    注意:14.0代表VS 2015,15.0代表2017等

  • 备份名为Microsoft.DotNet.targets的文件

  • 将此行添加到另一个
    ProjectCabability
    标记旁边的
    Microsoft.DotNet.targets

  • 保存文件,卸载并重新加载项目/重新启动visual studio

  • 您可能还需要删除.suo文件和/或.vs文件夹

    现在应该可以看到上下文菜单了。不幸的是,它也改变了图标。它似乎构建得很好,但这还没有经过认真的测试,使用风险自负。

    目前已经有一个与此相关的未解决问题

    在他们解决问题之前,您可以使用上所述的命令行方法。这并不意味着您可以获得上下文菜单项,但它仍然可以工作


    需要注意的是,文档引用的是
    ,而版本
    2.0.0
    已经发布,可以使用。

    1.添加到项目文件中(仅适用于dotnet 2.1之前的版本):

    请记住位于该项目的目录中(对于PackageManager控制台,这意味着将cd光盘放入项目中,而不是解决方案级别)

  • 在项目上单击鼠标右键,然后单击“编辑csproj文件”
  • 在第一行,将
    替换为
    并保存 现在,您可以访问“管理用户机密”菜单,对其进行编辑并保存。然后,您必须将csproj文件的第一行恢复为默认值,使其再次成为控制台应用程序

    这很愚蠢,但很有效。请记住,为每个项目替换usersecretsid属性,或者为所有项目仅替换一个
    secrets.json

    右键单击的“管理用户机密”仅在web项目中可用

    控制台应用程序的流程略有不同

    它需要手动将所需元素键入csproj文件,然后通过PMC添加机密

    我在这篇博文中一步一步地概述了我当前项目中的工作流程:

    tl;博士

    步骤1

    右键单击project并点击edit projectName.csproj

    步骤2

    此处插入新Guid
    添加到TargetFramework下的csproj中

    在csproj的项目组中添加

    步骤3

    将PowerShell(管理员)cd打开到项目目录并

    输入
    dotnet用户机密设置YourSecretName“YourSecretContent”

    这将在以下位置创建secrets.json文件:

    %APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json
    
    通过添加类的名称,您可以将机密绑定到要使用的对象

    使用刚刚在JSON中使用的相同名称创建基本POCO

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

    Microsoft.Extensions.Configuration.UserSecrets
    numget包添加到项目中

    var builder=new ConfigurationBuilder()
    .SetBasePath(目录.GetCurrentDirectory())
    .AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true)
    .AddUserSecrets()
    .AddenEnvironmentVariables();
    
    &

    var services=newservicecolection()
    .Configure(Configuration.GetSection(nameof(YourClassName)))
    .AddOptions()
    .BuildServiceProvider();
    GetService();
    
    到Program.cs文件

    然后将
    IOptions
    注入类的构造函数中

    private readonly YourClassName _secrets;
    
    public SecretConsumer(IOptions<YourClassName> secrets)
    {
      _secrets = secrets.Value;
    }
    
    private readonly YourClassName\u secrets;
    公开秘密消费者(IOptions机密)
    {
    _秘密=秘密。价值;
    }
    
    然后使用
    \u secrets.Secret1访问机密



    感谢Patric指出
    services.GetService()应该是
    services.GetService()

    除了此处发布的答案之外,如果您希望在项目中获得指向您自己的secrets.json文件的链接,您可以将以下代码添加到项目文件中的项目组:

    <None Include="$(AppData)\microsoft\UserSecrets\$(UserSecretsId)\secrets.json" Link="secrets.json" />
    
    
    
    管理用户机密
    可从Visual Studio 2019(在版本16.1.3中验证)以来的.NET核心控制台项目(不仅仅是ASP.NET核心项目)的上下文菜单中获得,一旦您引用了
    Microsoft.Extensions.Configuration.UserSecrets
    NuGet.

    Dotnet Core 3.1-我在只需要隐藏密码的情况下找到的最简单的方法。
    从项目文件夹使用命令行创建用户机密

    dotnet user-secrets init
    dotnet user-secrets set mailpassword password1
    
    在Program.cs中

    var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
                
    var secretProvider = config.Providers.First();
    if (!secretProvider.TryGet("mailpassword", out var secretPass) ) return;
    
    var config=n
    
    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>();
    
    private readonly YourClassName _secrets;
    
    public SecretConsumer(IOptions<YourClassName> secrets)
    {
      _secrets = secrets.Value;
    }
    
    <None Include="$(AppData)\microsoft\UserSecrets\$(UserSecretsId)\secrets.json" Link="secrets.json" />
    
    dotnet user-secrets init
    dotnet user-secrets set mailpassword password1
    
    var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
                
    var secretProvider = config.Providers.First();
    if (!secretProvider.TryGet("mailpassword", out var secretPass) ) return;
    
    public YourSecretClass()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddUserSecrets<Secrets>().Build();
    
        SecretID = builder.GetSection("SecretID").Value;
        SecretPwd = builder.GetSection("SecretPwd").Value;
    }