Подтвердить что ты не робот

Откройте web.config из консольного приложения?

У меня есть консольное приложение, которое выполняется на том же компьютере, на котором размещается куча файлов web.config. Мне нужно консольное приложение, чтобы открыть каждый файл web.config и расшифровать строку подключения, а затем проверить, работает ли строка подключения.

Проблема, с которой я сталкиваюсь, заключается в том, что OpenExeConfiguration ожидает, что файл конфигурации winforms (app.dll.config) и OpenWebConfiguration должен быть запущен через IIS. Поскольку это моя локальная машина, я не запускаю IIS (я использую встроенный сервер Visual Studio).

Есть ли способ открыть файлы web.config, сохраняя при этом надежность возможностей .NET для расшифровки строк соединения?

Спасибо

Обновление OpenWebConfiguration работает, если вы запрашиваете IIS напрямую или находитесь на веб-сайте, о котором вы хотите найти в web.config. То, что я хочу выполнить, - это такая же функциональность, но из консольного приложения, открывающего файл web.config веб-сайта на моем же компьютере, не используя запрос IIS, потому что IIS не работает на моей машине.

4b9b3361

Ответ 1

Хорошо, я получил его... скомпилировал и получил доступ к этому, поэтому я знаю, что он работает...

      VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(@"C:\test", true);
            WebConfigurationFileMap wcfm = new WebConfigurationFileMap();
            wcfm.VirtualDirectories.Add("/", vdm);


            // Get the Web application configuration object.
            Configuration config = WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");

            ProtectSection(config, @"connectionStrings", "DataProtectionConfigurationProvider");

Предполагается, что у вас есть файл с именем web.config в каталоге C:\Test.

Я скорректировал методы @Dillie-O, чтобы принять конфигурацию в качестве параметра.

Вы также должны ссылаться на System.Web и System.configuration и любые DLL, содержащие обработчики конфигурации, которые настроены в вашем web.config.

Ответ 2

Когда класс ConfigurationManager захватывает раздел из файла конфигурации, он имеет свойство IsProtected, которое может вывести для данного раздела, который вы захватите. Если он защищен, вы можете удалить его с помощью некоторого кода.

Основной метод шифрования/дешифрования выглядит следующим образом (взято из ссылки статьи ниже):

private void ProtectSection(string sectionName, string provider)
{
    Configuration config =
        WebConfigurationManager.
            OpenWebConfiguration(Request.ApplicationPath);

    ConfigurationSection section =
                 config.GetSection(sectionName);

    if (section != null &&
              !section.SectionInformation.IsProtected)
    {
        section.SectionInformation.ProtectSection(provider);
        config.Save();
    }
}

private void UnProtectSection(string sectionName)
{
    Configuration config =
        WebConfigurationManager.
            OpenWebConfiguration(Request.ApplicationPath);

    ConfigurationSection section =
              config.GetSection(sectionName);

    if (section != null &&
          section.SectionInformation.IsProtected)
    {
        section.SectionInformation.UnprotectSection();
        config.Save();
    }
}

Ознакомьтесь с в этой статье для получения полной информации о работе с этим.

Ответ 3

Я думаю, вы хотите использовать класс WebConfigurationManager с помощью метода OpenWebConfiguration.

Он принимает путь к web.config и должен открывать его так же, как в приложении на основе HTTPContext.