app.config для библиотеки classов

Я не вижу файл app.config, сгенерированный для библиотеки classов с помощью мастера VS2008. В своем исследовании я обнаружил, что в приложении существует только один app.config.

Неплохо добавить приложение app.config вручную в библиотеку classов или какие-либо другие методы, которые будут использоваться для приложения app.config в библиотеке classов?

Мне нужно сохранить конфигурационную информацию log4net в файле app.config.

8 Solutions collect form web for “app.config для библиотеки classов”

Обычно вы не должны добавлять файл app.config в проект библиотеки classов; он не будет использоваться без каких-либо болезненных изгибов и скручивания с вашей стороны. Это вообще не повредит библиотечному проекту – он просто ничего не сделает.

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

Я не знаю, почему этот ответ еще не был дан:

Различные абоненты одной и той же библиотеки, в общем, используют разные конфигурации. Это означает, что конфигурация должна находиться в исполняемом приложении, а не в библиотеке classов.

Вы можете создать app.config в проекте библиотеки classов. Он будет содержать конфигурации по умолчанию для элементов, которые вы создаете в библиотеке. Например, он будет содержать строки подключения, если вы создадите модель Entity Framework в библиотеке classов.

Однако эти параметры не будут использоваться исполняемым приложением, вызывающим библиотеку. Вместо этого эти параметры могут быть скопированы из файла library.dll.config в app.config или web.config вызывающего абонента, чтобы они могли быть изменены, чтобы быть конкретными для вызывающего, и для среды, в которой вызывающий развертывается.

Так было с .NET с первого дня.

Джон, было высказано много мнений, которые неправильно ответили на ваш вопрос.

Я дам МОЕ МНЕНИЕ, а затем расскажу, как делать то, что вы просили.

Я не вижу причин, почему assembly не может иметь собственный файл конфигурации. Почему первый уровень атомизации (это настоящее слово?) Находится на уровне приложения? Почему не на уровне решения? Это произвольное, наилучшее решение и, как таковое, МНЕНИЕ. Если вы хотите написать библиотеку протоколирования и хотите включить в нее файл конфигурации, который будет использоваться во всем мире, почему вы не можете подключиться к встроенным функциям настроек? Мы все это сделали … попытались предоставить «мощную» функциональность другим разработчикам. Как? Сделав предположения, которые по сути были переведены на ограничения. Именно это сделала MS с настройкой, поэтому вам нужно немного «обмануть» ее.

Чтобы напрямую ответить на ваш вопрос, просто добавьте файл конфигурации вручную (xml) и назовите его в соответствии с вашей библиотекой и включите расширение «config». Пример:

MyDomain.Mylibrary.dll.Config

Затем используйте ConfigurationManager для загрузки файлов и настроек доступа:

 string assemblyPath = new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath; Configuration cfg = ConfigurationManager.OpenExeConfiguration(assemblyPath); string result = cfg.AppSettings.Settings["TEST_SETTING"].Value; 

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

Если вы хотите настроить ведение журнала проекта с помощью log4Net, используя библиотеку classов, фактической необходимости в любом файле конфигурации не требуется. Вы можете настроить логгер log4net в classе и использовать этот class как библиотеку.

Поскольку log4net предоставляет все параметры для его настройки.

Пожалуйста, найдите код ниже.

 public static void SetLogger(string pathName, string pattern) { Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); PatternLayout patternLayout = new PatternLayout(); patternLayout.ConversionPattern = pattern; patternLayout.ActivateOptions(); RollingFileAppender roller = new RollingFileAppender(); roller.AppendToFile = false; roller.File = pathName; roller.Layout = patternLayout; roller.MaxSizeRollBackups = 5; roller.MaximumFileSize = "1GB"; roller.RollingStyle = RollingFileAppender.RollingMode.Size; roller.StaticLogFileName = true; roller.ActivateOptions(); hierarchy.Root.AddAppender(roller); MemoryAppender memory = new MemoryAppender(); memory.ActivateOptions(); hierarchy.Root.AddAppender(memory); hierarchy.Root.Level = log4net.Core.Level.Info; hierarchy.Configured = true; } 

Теперь вместо вызова XmlConfigurator.Configure (новая FileInfo («app.config»)) вы можете напрямую вызвать SetLogger с нужным путем и шаблоном, чтобы установить регистратор в функции запуска приложения Global.asax.

И используйте приведенный ниже код для регистрации ошибки.

  public static void getLog(string className, string message) { log4net.ILog iLOG = LogManager.GetLogger(className); iLOG.Error(message); // Info, Fatal, Warn, Debug } 

Используя следующий код, вам не нужно писать ни одну строку ни в приложении web.config, ни внутри библиотеки app.config.

Фактически, библиотека classов, которую вы реализуете, извлекает информацию из app.config внутри приложения, которое ее потребляет, поэтому наиболее правильный способ реализации конфигурации для библиотек classов в .net в VS заключается в подготовке app.config в приложение для настройки всего, что он потребляет, например, конфигурации библиотек.

Я немного поработал с log4net, и я обнаружил, что у того, кто подготовил приложение, всегда был раздел для конфигурации log4net в главном app.config .

Я надеюсь вы найдете эту информацию полезной.

Увидимся и опубликуем комментарии о найденном решении.

РЕДАКТИРОВАТЬ:

На следующей ссылке у вас есть app.config с разделом для log4net:

http://weblogs.asp.net/tgraham/archive/2007/03/15/a-realistic-log4net-config.aspx

Собственно, для некоторых редких случаев вы можете хранить app.config в библиотеках classов (добавив вручную) и проанализировать его с помощью OpenExeConfiguration .

  var fileMap = new ExeConfigurationFileMap {ExeConfigFilename = @"C:\..somePath..\someName.config"}; System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 

Вы действительно должны оценить реальную потребность в этом. Для абстрактных данных это не самое лучшее решение, но «Config Sections» может быть очень полезно!

Например, мы объединили нашу архитектуру WCF N-Tier без каких-либо метаданных, просто используя Unity Container и Injection Factory на базе Channel Factory T. Мы добавили DLL externall ClassLibrary с помощью только интерфейсов [Service Contract] и обычного app.config в порядке читать конечные точки из клиентов, а также легко добавлять / изменять их в одном месте.

Вы хотите добавить App.config в свою библиотеку classов тестов , если вы используете трассировщик / регистратор. В противном случае ничего не регистрируется при запуске теста через тестовый бегун, например TestDriven.Net.

Например, я использую TraceSource в своих программах, но выполняемые тесты ничего не записывают, если я не добавлю файл App.config с конфигурацией трассировки / журнала в библиотеку тестовых classов тоже.

В противном случае добавление App.config в библиотеку classов ничего не делает.

Автоматическое добавление файла app.config при добавлении проекта библиотеки classов в ваше решение отсутствует.

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

О конфигурации log4Net вам не нужно вставлять конфиг в app.config, вы можете иметь выделенный файл conf в своем проекте, а также файл app.config одновременно.

эта ссылка http://logging.apache.org/log4net/release/manual/configuration.html даст вам примеры обо всех путях (раздел в файле app.config и автономном файле журнала log4net)

  • Как добавить class фильтра в Spring Boot?
  • Получение cmake для создания из исходного кода без обертывания скриптов?
  • Как выбрать другой app.config для нескольких конфигураций сборки
  • Spring Boot - как настроить порт
  • Изменение строки подключения и перезагрузка app.config во время выполнения
  • @Value не разрешается при использовании annotations @PropertySource. Как настроить PropertySourcesPlaceholderConfigurer?
  • Получение контекста приложения Spring
  • Как получить конфигурационные параметры в Symfony2 Twig Templates
  • Зачем мне нужно настроить диалект SQL источника данных?
  • Как использовать общие свойства для нескольких проектов maven?
  • Spring Boot JPA - настройка автоматического повторного подключения
  • Давайте будем гением компьютера.