我试图在控制台应用程序中使用user secrets来存储我的数据库的连接字符串。当我在Program.Main
方法中设置所有内容时,它工作正常。
public static void Main(string[] args) {
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true)
.AddUserSecrets();
var configuration = builder.Build();
using (var db = new ApplicationDbContext(configuration.GetConnectionString("DefaultConnection"))) {
foreach (var person in db.People) {
Console.WriteLine($"Person: {person.FirstName}");
}
}
}
但是这需要ApplicationDbContext
在构造函数中获取参数,从而阻止dotnet ef
工具工作。如果我尝试在ApplicationDbContext
类中构建配置,我会收到此错误:
Could not find 'UserSecretsIdAttribute' on assembly 'ef, Version=1.1.0.0,
Culture=neutral, PublicKeyToken=...'
我认为它可能与this issue有关,但添加Assembly
参数无效。
.AddUserSecrets(typeof(Program).GetTypeInfo().Assembly);
我还尝试在UserSecretsId
中添加xproj
属性,recommended by this answer,但仍无法找到。它已经在我的project.json
文件中:
{
"userSecretsId": "Project-45654..."
}
如何使用用户机密在我的控制台应用中存储数据库连接字符串,并且仍能使用dotnet ef
命令行工具?