当我创建一个新的ASP .NET核心Web-应用程序,我可以在Visual Studio中右键单击该项目,然后看到名为“管理用户密码”的上下文菜单项。如何在.NET Core控制台应用程序中获得“管理用户机密”?
当我创建一个新的.NET核心控制台-应用程序,我没有看到这个上下文菜单项。
但是,“Web” - 应用程序在项目设置中显示为“控制台”应用程序。有没有什么办法可以在控制台应用程序中获得这个上下文菜单项?
当我创建一个新的ASP .NET核心Web-应用程序,我可以在Visual Studio中右键单击该项目,然后看到名为“管理用户密码”的上下文菜单项。如何在.NET Core控制台应用程序中获得“管理用户机密”?
当我创建一个新的.NET核心控制台-应用程序,我没有看到这个上下文菜单项。
但是,“Web” - 应用程序在项目设置中显示为“控制台”应用程序。有没有什么办法可以在控制台应用程序中获得这个上下文菜单项?
如何在.NET Core控制台应用程序中获得“管理用户机密”?
和地方文件您可以手动输入用户密码。
我能够使用命令提示来设置用户的秘密:
C:\项目\ ConsoleApp2 \ SRC \ ConsoleApp2> DOTNET用户秘密设置BrainTree_sandbox:商家ID:9rv9mhnb5gh7nnyx
看来他们没有添加(至少到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
您现在应该看到上下文菜单。它也不幸地改变了图标。它似乎构建得很好,但这是非常严重的未经测试,使用风险自负。
在GitHub已经有一个与此相关的未解决的问题。
你可以做什么,直到他们解决它,就是使用Visual Studio Code or Command Line: Installing the Secret Manager tool上描述的命令行方法。这并不意味着你得到你的上下文菜单项,但它仍然有效。
需要注意的是,文档所指的是<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" />
,而版本2.0.0
已经停用并且可以使用。
对我来说,我不得不添加:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
</ItemGroup>
然后设置
<PropertyGroup>
<UserSecretsId>a random user id: manually add</UserSecretsId>
</PropertyGroup>
移动到PMC迁移项目文件夹,并添加一个关键:像值:
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "xxxxx"
<Project Sdk="Microsoft.NET.Sdk">
替换为<Project Sdk="Microsoft.NET.Sdk.Web">
并保存。现在您可以访问管理用户机密菜单,编辑并保存。然后,您必须将csproj文件的第一行恢复为默认值,以再次成为控制台应用程序。
这是愚蠢的,但它的作品。请记住替换每个项目的usersecretsid属性,或者对于您的所有项目只有一个secrets.json
。
右键单击“管理用户机密”仅在Web项目中可用。
有控制台应用程序略有不同的过程
它需要手动键入所需的元素融入到您的csproj文件,然后通过PMC
加入秘密我已经概述了在我目前的工作对我来说过程项目一步步在这篇博客文章:
TL;博士
步骤1
右键单击项目和命中编辑PROJECTNAME。的csproj
步骤2
添加<UserSecretsId>Insert New Guid Here</UserSecretsId>
到的csproj TargetFramework
项目组内的csproj添加<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0"/>
步骤3
打开PowerShell的(管理)cd到项目目录和
进入dotnet user-secrets set YourSecretName "YourSecretContent"
这将创建一个secrets.json文件:
%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json
哪里userSecretsId =您的csproj
步骤4
公开的秘密创造了新的GUID .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<NameOfClass>();
到您的Program.cs文件。
然后用_secrets.Secret1;
这是我们太使用的方法和它的作品很好地注入到
IOptions<YourClassName>
类然后访问秘密的构造。它具有附加的好处,就是VS团队最终会做出(预期的)修正(假设它将像Web项目一样工作),成为最兼容的方法。 –