Как читать файл web.config в приложении.Net Core

Я создал API-интерфейс.Net Core, и я применил к нему приложение.Net framework. Указанное приложение подключается к базе данных, а строка подключения хранится в файле web.config:

    string CONNSTR =ConfigurationManager.ConnectionStrings["SHOPPINGCNN"].ConnectionString;

Приложение.Net Core использует appsettings.json вместо файла web.config. Когда я запускаю API и пытаюсь использовать ресурсы ресурсов, на которые ссылаются, приведенный выше код будет запущен и будет возвращать значение null, потому что в.net Core не существует файла web.config. Какое наилучшее решение для решения этой проблемы?

Ответ 1

Поскольку приложения .Net Core размещаются самостоятельно и могут работать практически на любой платформе, они больше не размещаются на IIS. Настройки приложения .Net Core по умолчанию хранятся в формате Json (appsettings.json), а конфигурации приложения .Net Framework хранятся в файле web.config в формате XML. Для получения дополнительной информации о приложениях .Net Core вы можете прочитать Конфигурация в ASP.NET Core. В моем случае я пытался получить доступ к слою данных сборки .Net Framework из сборки .Net Core 2.0. Для этого нет необходимости устанавливать пакет System.Configuration.ConfigurationManager в приложении .Net Core, но вам нужно только добавить app.config в сборку .Net Core, а затем добавить в него строку подключения. :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="SHOPPINGCNN" connectionString="server=your server name;integrated security=true;database=your database name" />
  </connectionStrings>
</configuration>

После этого все будет работать нормально. Убедитесь, что вы используете то же имя строки подключения (SHOPPINGCNN в моем случае), которое вы использовали в своем приложении .Net Framework, иначе вы не получите желаемого результата. Я сделал это в моем проекте, и он работает на 100%.

Ответ 2

.net core вы можете использовать ConfigurationBuilder для чтения файла appsettings.json.

Вы можете реализовать, как показано ниже.

Пример приложения appsettings.json

{
  "option1": "value1_from_json",
  "option2": 2,

  "ConnectionStrings": {
    "YourConnectionString": "............."
  }
}

Пример кода С#

static class YourClass
{
    public static IConfigurationRoot Configuration;

    public static string GetConnectionString()
    {
         var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json");

         Configuration = builder.Build();
         var connectionString = Configuration["ConnectionStrings:YourConnectionString"];

    }

}

Ответ 3

Для приложений.NET Core лучшим способом является использование API конфигурации. Это очень гибкий способ, и благодаря шаблону поставщиков он позволяет использовать разные источники, а не только самый распространенный файл appsettings.json (который, кстати, просто является файлом JSON и может быть назван случайным образом):

  • Форматы файлов (INI, JSON и XML)
  • Аргументы командной строки
  • Переменные среды
  • Объекты в памяти.NET
  • Зашифрованное хранилище пользователей.
  • Пользовательские поставщики, которые вы устанавливаете или создаете

Теперь о ConfigurationManager. Сначала.NET Core вынужден был забыть об этом классе - он не был реализован и не поддерживался, и идея заключалась в том, чтобы полностью заменить его, предоставив новый API конфигурации.

Более того, реальность заключается в том, что приложения ASP.NET Core не размещаются через IIS больше (IIS работает в основном как обратный прокси сейчас), и поэтому web.config не так полезен больше (если только редкие случаи, когда вам еще нужно определить параметры, специфичные для конфигурации IIS).

Хотя, после предоставления.NET Standard 2.0, этот пакет System.Configuration.ConfigurationManager nuget доступен и возвращает класс ConfigurationManager. Это стало возможным благодаря новой совместимости в новом.NET Core 2.0.

Что касается вашего дела, трудно сказать, почему у вас есть "нуль", так как ему недостаточно информации:

  • это может быть неправильный раздел в web.config
  • web.config не может быть скопирован в папку вывода/публикации

Ответ 4

Если вы его пропустили - и потому, что @Zuhair, похоже, не хочет публиковать ответ - вот скопируйте их решение (я пропустил это сначала, как это было только в комментарии):

Я нашел решение. Я изменил имя файла Web.config на app.config, и мне удалось получить строку подключения, используя:

System.Configuration.ConfigurationManager.ConnectionStrings [ "SHOPPINGCNN"]. ConnectionString

Файл app.config выглядит так:

<?xml version="1.0"> encoding="utf-8" ?> 
<configuration> 
<connectionStrings> 
<add name="SHOPPINGCNN" connectionString="server=.\SQLEXPRESS;integrated security=true;database=xxxxx" /> 
</connectionStrings> 
</configuration>

Вам также необходимо установить этот пакет NuGet:

System.Configuration.ConfigurationManager

В моем случае я просто переименовал web.config, содержащий connectionString 'app.config', и он сработал.

Я понимаю, что это, вероятно, неплохое долгосрочное решение, но для смешанных проектов, связанных с наследием, или чтобы ступить в дверь, чтобы начать изучать.net Core. Это очень полезно.