Как читать файл 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. Это очень полезно.