Открыть web.config из консольного приложения? - PullRequest
23 голосов
/ 05 февраля 2009

У меня есть консольное приложение, которое работает на том же компьютере, на котором размещена куча файлов 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 не работает на моем компьютере.

Ответы [ 4 ]

38 голосов
/ 05 февраля 2009

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

      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.

3 голосов
/ 05 февраля 2009

Когда класс 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();
    }
}

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

0 голосов
/ 07 марта 2018
    public static string WebKey(string key)
    {

        var configFile = new System.IO.FileInfo(webconfigPath);
        var vdm = new VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name);
        var wcfm = new WebConfigurationFileMap();
        wcfm.VirtualDirectories.Add("/", vdm);
        System.Configuration.Configuration config = WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
        System.Configuration.AppSettingsSection appSettingSection = (System.Configuration.AppSettingsSection)config.GetSection("appSettings");
        System.Configuration.KeyValueConfigurationElement kv = appSettingSection.Settings.AllKeys
                         .Where(x => x.Equals(key))
                         .Select(x => appSettingSection.Settings[key])
                         .FirstOrDefault();

        return kv != null ? kv.Value : string.Empty;

    }
0 голосов
/ 05 февраля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...