gpt4 book ai didi

.net-core - 如何在 .NET Core 控制台应用程序中获取 "Manage User Secrets"?

转载 作者:行者123 更新时间:2023-12-03 02:30:22 26 4
gpt4 key购买 nike

当我创建新的 ASP .NET Core Web 应用程序时,我可以在 Visual Studio 中右键单击该项目,然后看到一个名为“管理用户 secret ”的上下文菜单条目。

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

但是,“Web”应用程序在项目设置中显示为“控制台”应用程序。有什么方法可以在控制台应用程序中获取此上下文菜单条目吗?

最佳答案

右键单击“管理用户 secret ”仅在 Web 项目中可用。

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

它需要手动将所需的元素输入到您的 csproj 文件中,然后通过 PMC 添加 secret

我在这篇博文中逐步概述了在我当前项目中适用的流程:

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

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

第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"
}
}

通过添加类的名称,您可以将您的 secret 绑定(bind)到要使用的对象。

使用您刚刚在 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 文件。

然后注入(inject)IOptions<YourClassName>进入你的类的构造函数

private readonly YourClassName _secrets;

public SecretConsumer(IOptions<YourClassName> secrets)
{
_secrets = secrets.Value;
}

然后使用 _secrets.Secret1; 访问 secret

<小时/>

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

关于.net-core - 如何在 .NET Core 控制台应用程序中获取 "Manage User Secrets"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42268265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com