在.Net Core 3.1中解密app.config连接字符串

问题描述

我为控制台应用程序提供以下代码:

        // 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上尝试时,它将在“ UNPROTECT”代码处引发“ PlatformNotSupportedException”。

这是在同一个工作站上,并且所有东西都在同一个地方。

ConfigurationManager和SectionInformation的官方文档显示了与Core 3.0和3.1的兼容性。

我猜测这些类与Core是“兼容的”,以便访问配置文件,但解密不是因为解密的密钥存储在Framework中,而是因为Core是跨平台的,因此没有访问密钥。 (是吗?)

如果此平台不支持连接字符串的解密,那么除了加密/解密连接字符串之外,还有其他更好的选择吗?

我看上去高低不一,但似乎什么也找不到。

注意:解密加密的连接字符串的能力至关重要!

谢谢。

解决方法

DotNetCore中已弃用ConfigurationManager类,已将其替换为IConfiguration类,您可以使用ConfigurationBuilder类来构造该类,下面是加载json文件的示例(请注意,为此需要两个nuget依赖项,分别是Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json):


var config = new ConfigurationBuilder()
    .AddJsonFile("Config.json",true) // bool to say whether it is optional
    .Build()

如前所述,这将为您提供IConfiguration类的实例,该实例记录在here中,但与ConfigurationManager十分相似

config.json的示例:

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...