.net core 如何获得;“管理用户机密”;在.NET核心控制台应用程序中?
当我创建一个新的ASP.NET CoreWeb-应用程序时,我可以在Visual Studio中右键单击该项目,并看到一个名为“管理用户机密”的上下文菜单项 当我创建一个新的.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
但是,“Web”应用程序在项目设置中显示为“控制台”应用程序。有没有办法在控制台应用程序中获取此上下文菜单项 如何在.NET核心控制台应用程序中获取“管理用户机密” 使用Visual Studio 2015社区和更新3
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等
ProjectCabability
标记旁边的Microsoft.DotNet.targets
需要注意的是,文档引用的是
,而版本2.0.0
已经发布,可以使用。1.添加到项目文件中(仅适用于dotnet 2.1之前的版本):
请记住位于该项目的目录中(对于PackageManager控制台,这意味着将cd光盘放入项目中,而不是解决方案级别)
替换为
并保存李>
现在,您可以访问“管理用户机密”菜单,对其进行编辑并保存。然后,您必须将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;
}