當我創建一個新的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項目一樣工作),成爲最兼容的方法。 –