当我创建一个新的ASP .NET Core Web - 应用程序时,我可以在Visual Studio中右键单击该项目,然后我会看到一个名为"管理用户秘密的上下文菜单项#34 ;.
当我创建新的.NET Core 控制台 - 应用程序时,我没有看到此上下文菜单条目。
然而," Web" -Application显示为" console"应用程序在项目设置中。有什么办法可以在控制台应用程序中获得这个上下文菜单条目吗?
答案 0 :(得分:37)
"管理用户机密"从右键单击仅在Web项目中可用。
控制台应用程序的过程略有不同
它需要在csproj文件中手动输入所需的元素,然后通过PMC添加秘密
我已经在本博客文章中逐步概述了当前项目对我有用的过程:
TL;博士
第1步
右键单击项目并点击编辑projectName.csproj
第2步
将<UserSecretsId>Insert New Guid Here</UserSecretsId>
添加到TargetFramework
在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>
移至Package Manager控制台中的迁移项目文件夹并添加一个键:值如:
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "xxxxx"
请记住在该项目的目录中(对于包管理器控制台,这意味着进入项目,而不是解决方案级别)
答案 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操作系统
打开文件资源管理器到C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v{Version Number}\DotNet
注意: 14.0是VS 2015,15.0是2017等等
备份名为Microsoft.DotNet.targets
将此行添加到其他Microsoft.DotNet.targets
代码
ProjectCabability
<ProjectCapability Include="DotNetCoreWeb" />
保存文件,然后卸载并重新加载项目/重新启动visual studio。
您可能还需要删除.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)
<Project Sdk="Microsoft.NET.Sdk">
替换<Project Sdk="Microsoft.NET.Sdk.Web">
并保存。 现在您可以访问管理用户机密菜单,编辑并保存。然后你必须将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一起使用
您可以手动输入用户密码。
我能够使用命令提示符来设置用户机密:
c:\ Projects \ ConsoleApp2 \ src \ ConsoleApp2&gt; dotnet用户机密设置BrainTree_sandbox:商家ID:9rv9mhnb5gh7nnyx