我有以下控制台应用程序代码:
// Get the app config file.
var configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Get the sections to unprotect.
ConfigurationSection connStrings = configuration.ConnectionStrings;
string connection = null;
if (connStrings != null)
{
// UNPROTECT
connStrings.SectionInformation.UnprotectSection();
connection = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
}
这段代码在 Framework 4.8 上运行良好,但是当我在 Core 3.1 上尝试时,它会抛出
平台不支持异常
在"取消保护"代码中。
这是在同一个工作站和所有东西上。
ConfigurationManager 和 SectionInformation 的官方文档都显示了与 Core 3.0 和 3.1 的兼容性。
我猜这些类与 Core "兼容",以方便访问配置文件,但解密不是因为解密密钥存储在框架中,而是 Core 是跨平台的,因此无法访问密钥。(是吗?
如果此平台不支持连接字符串解密,是否有加密/解密连接字符串的首选替代方法?
我看了高看低,但似乎什么也找不到。
注意:解密加密连接字符串的能力至关重要!
ConfigurationManager
类在 DotNetCore 中已被弃用,它已被替换为您可以使用ConfigurationBuilder
类构造的IConfiguration
类,下面是加载 json 文件的示例(请注意,您需要两个 nuget 依赖项,分别是Microsoft.Extensions.Configuration
和Microsoft.Extensions.Configuration.Json
):
var config = new ConfigurationBuilder()
.AddJsonFile("Config.json", true) // bool to say whether it is optional
.Build()
如前所述,这将为您提供IConfiguration
类的实例,该实例在此处记录,但与ConfigurationManager
非常相似
config.json
示例:
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}