如何获得"管理用户秘密"在.NET Core控制台应用程序中?

时间:2017-02-16 08:11:35

标签: .net-core asp.net-core-1.0 visual-studio-2017

当我创建一个新的ASP .NET Core Web - 应用程序时,我可以在Visual Studio中右键单击该项目,然后我会看到一个名为"管理用户秘密的上下文菜单项#34 ;.

当我创建新的.NET Core 控制台 - 应用程序时,我没有看到此上下文菜单条目。

然而," Web" -Application显示为" console"应用程序在项目设置中。有什么办法可以在控制台应用程序中获得这个上下文菜单条目吗?

10 个答案:

答案 0 :(得分:37)

"管理用户机密"从右键单击仅在Web项目中可用。

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

它需要在csproj文件中手动输入所需的元素,然后通过PMC添加秘密

我已经在本博客文章中逐步概述了当前项目对我有用的过程:

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

TL;博士

第1步

右键单击项目并点击编辑projectName.csproj

第2步

<UserSecretsId>Insert New Guid Here</UserSecretsId>添加到TargetFramework

下的csproj中

在csproj

中的项目组中添加<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0"/>

第3步

打开PowerShell(admin)cd到项目目录和

输入dotnet user-secrets set YourSecretName "YourSecretContent"

这将在:

中创建一个secrets.json文件
%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json

其中userSecretsId =您为csproj创建的新Guid

第4步

打开secrets.json并编辑看起来与此类似

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

通过添加类的名称,您可以将您的秘密绑定到要使用的对象。

创建一个与您在JSON中使用的名称相同的基本POCO。

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;

访问机密

感谢Patric指出services.GetService<NameOfClass>();应为services.GetService<SecretConsumer>();

答案 1 :(得分:7)

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. 移至Package Manager控制台中的迁移项目文件夹并添加一个键:值如:

    dotnet user-secrets set "ConnectionStrings:DefaultConnection" "xxxxx"
    
  2. 请记住在该项目的目录中(对于包管理器控制台,这意味着进入项目,而不是解决方案级别)

答案 2 :(得分:5)

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;

如果您要通过配置执行更多操作,则可能需要调整.First()

答案 3 :(得分:2)

似乎他们没有添加(至少对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. 的文件
  4. 将此行添加到其他Microsoft.DotNet.targets代码

    旁边的ProjectCabability

    <ProjectCapability Include="DotNetCoreWeb" />

  5. 保存文件,然后卸载并重新加载项目/重新启动visual studio。

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

    您现在应该看到上下文菜单。不幸的是,它也改变了图标。它似乎构建得很好,但这是非常严重的,所以认真对待,使用风险自负。

答案 4 :(得分:2)

GitHub上已经有一个 open 已关闭的问题。

在解决问题之前你可以做的是使用Visual Studio Code or Command Line: Installing the Secret Manager tool中描述的命令行方法。这并不意味着您获得了上下文菜单项,但它仍然有用。

请注意,文档指的是<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" />,而版本2.0.0已经用完且可以使用。

答案 5 :(得分:2)

  1. 右键单击该项目,然后单击编辑csproj文件。
  2. 在第一行用<Project Sdk="Microsoft.NET.Sdk">替换<Project Sdk="Microsoft.NET.Sdk.Web">并保存。
  3. 现在您可以访问管理用户机密菜单,编辑并保存。然后你必须将csproj文件的第一行恢复为默认值,再次成为控制台应用程序。

    这很愚蠢,但确实有效。请记住,为每个项目替换usersecretsid属性,或者只为您的所有项目添加一个secrets.json

答案 6 :(得分:2)

Manage User Secrets现在可从Visual Studio 2019(在版本16.1.3中验证)的.NET Core控制台项目(不仅仅是ASP.NET Core项目)的上下文菜单中获得。

答案 7 :(得分:1)

除了此处发布的答案外,如果您想要链接到项目中自己的secrets.json文件,还可以将以下代码添加到项目文件中的ItemGroup中:

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

答案 8 :(得分:0)

如果只需要获取 User Secrets 配置,那么在以下代码的构造函数中就足够了:

public YourSecretClass()
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddUserSecrets<Secrets>().Build();

    SecretID = builder.GetSection("SecretID").Value;
    SecretPwd = builder.GetSection("SecretPwd").Value;
}

答案 9 :(得分:-3)

如何在.NET Core控制台应用程序中获得“管理用户秘密”?

将Visual Studio 2015社区与更新3一起使用

  1. 文件 - &gt;新建 - &GT;项目
  2. 选择控制台应用程序(.NET Core)
  3. 按CTRL + ALT + L
  4. 点击该项目以获得“管理用户秘密”,它将打开 一个名为secrets.json的文件
  5. 您可以手动输入用户密码。

    我能够使用命令提示符来设置用户机密:

    c:\ Projects \ ConsoleApp2 \ src \ ConsoleApp2&gt; dotnet用户机密设置BrainTree_sandbox:商家ID:9rv9mhnb5gh7nnyx