如何从user-secrets中提取值以用于dotnet命令?
目前我能做的就是:
$c = dotnet user-secrets list
显示我:AppSettings:MyConnectionString = "连接字符串的值">
$c.GetType() //tells me BaseType = System.Object, Name = String, etc.
现在我可以尝试提取连接字符串的值,但这似乎不是一个好方法。
我想在命令中使用user-secret:
dotnet ef dbcontext scaffold <MyConnectionString> Microsoft.EntityFrameworkCore.SqlServer -o Models
如果我手动输入,那么数据库凭据将存储在命令行历史记录中,并且我将在Visual Studio中获得关于如何通过将其包含在配置文件中来保护潜在敏感信息的警告。但是,我希望使用user-secrets进行开发,而不是将连接字符串添加到我的配置文件中。
您可以执行dotnet user-secrets list --json
以获得机器可读格式的值。然后,您可以使用PowerShell的ConvertFrom-Json
将输出转换为PSCustomObject
,其中每个密钥都可以作为NoteProperty
使用。
$secrets = dotnet user-secrets list --json | ConvertFrom-Json
dotnet ef dbcontext scaffold $secrets.'AppSettings:MyConnectionString' ...
(只有当名称中包含非字母数字字符时,才需要在秘密名称周围加引号。)
NB
由于某些不可思议的原因,JSON被//BEGIN
和//END
包装。
//BEGIN
{
"AppSettings:MyConnectionString": "Data Source=..."
}
//END
PowerShell 7忽略注释,但如果你使用的是Windows PowerShell,那么你会得到一个错误。
ConvertFrom-Json: Invalid JSON primitive: .
此错误的一个可能的解决方法是使用-replace
操作符删除//BEGIN
和//END
。另一个解决方法是跳过第一行和最后一行。
# Using Windows PowerShell
$json = dotnet user-secrets list --json
$secrets = $json | % { $_ -replace '//(BEGIN|END)' } | ConvertFrom-Json
# or
$secrets = $json | select -Skip 1 | select -SkipLast 1 | ConvertFrom-Json