Как использовать конфигурацию приложения импортированного проекта C # - PullRequest
3 голосов
/ 08 марта 2012

Я использую Visual Studio 2010 и C # 4.0. У меня есть проект, который предоставляет интерфейс для веб-службы. У него есть app.config, который определяет привязки для веб-службы. Я хочу представить этот проект как библиотеку для использования другими клиентами.

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

Есть ли способ использовать app.config внутри моего библиотечного проекта, чтобы мои клиенты могли использовать его без необходимости определять собственный файл конфигурации?

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Как насчет того, чтобы немного изменить проект библиотеки:

  1. Измените app.config в действии построения проекта библиотеки на "Встроенный ресурс".
  2. Измените код, когдачитая config, проверьте, если config существует, если нет, извлеките app.config из Embedded Resource в текущую папку, а затем используйте что-то вроде ConfigurationManager.OpenMappedExeConfiguration , чтобы прочитать его.

После этого любой проект, использующий эту библиотеку, сможет не беспокоиться об этих настройках.

0 голосов
/ 08 марта 2012

Сначала создайте служебную функцию, как показано ниже.Эта функция должна находиться в библиотеке или классе, который может быть вызван из вашего веб-сервиса (и, конечно, вашего основного проекта).Лучше добавить ссылку на эту библиотеку в ваш веб-сервис.

    public static string GetAppConfigValue(string key)
    {
        return ConfigurationManager.AppSettings[key] ?? GetAppConfigValue(GetAppConfigFileName(), key);
    }

    private static string GetAppConfigValue(string appConfigFileName, string key)
    {
        ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
        fileMap.ExeConfigFilename = appConfigFileName;
        Configuration appConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
        return appConfig.AppSettings.Settings[key].Value;
    }

Теперь, если вы можете вызвать GetAppConfigValue(string) из вашего основного проекта, он возвращает значение кэшированного app.config, поскольку это его собственная конфигурацияфайл.Вы также можете вызвать публичную функцию из проекта веб-службы, когда она вернет сопоставленные параметры конфигурации.Сложная задача - правильно указать полный путь к файлу конфигурации!

...