#c# #.net-3.5
#c# #.net-3.5
Вопрос:
В моем текущем решении есть 3 проекта с 2 app.config (один для общих настроек, а другой для настроек службы). На данный момент я просто создаю статические классы, которые выступают в качестве посредника для доступа к значениям. Я делаю это, чтобы мне не приходилось писать ConfigurationManager.AppSettings["SomeKey"]
везде. Это работает нормально, пока вы не захотите получить доступ к файлу app.config из другого проекта.
Вот что я сейчас делаю (все свойства опущены для краткости).
public class ServiceConfiguration
{
public static readonly string SyncEvery = ConfigurationManager.AppSettings["SyncEveryMinutes"];
}
Как я могу получить доступ к файлу app.config, расположенному в другом проекте? Я подумал, что, возможно, установка VS для копирования файла в выходной каталог поможет, однако мой объект конфигурации по-прежнему равен нулю.
Комментарии:
1. Я не вижу, как ServiceConfiguration. FindKeyValue(ключ) лучше, чем Configurationmanager . Настройки приложений [ключ]? Что вы получаете?
2. Плохой пример. На самом деле у меня есть переопределение
T FindKeyValue<T>(string key)
, которое позволяет мне извлекать значения, отличные от string .
Ответ №1:
Я не могу представить много веских причин для чтения конфигурации другого приложения в первую очередь, это просто открывает банку с червями, с которой не стоит иметь дело.
Предоставьте класс, который предоставляет настроенные значения проекта в качестве свойств, и получите к ним доступ из класса-потребителя.
public class FirstProjectClass
{
public static int SyncEveryMinutes
{
get { return (int)ConfigurationManager.AppSetting["SyncEveryMinutes"] };
}
}
public class SecondProjectClass
{
public void ShowConfigedValue()
{
Console.Writeline("Syncing every {0} minutes", FirstProjectClass.SyncEveryMinutes);
}
}
если у вас сложные требования к конфигурации, вы также можете просмотреть разделы пользовательской конфигурации
Ответ №2:
ConfigurationManager.Настройка OpenExeConfiguration может быть полезной: http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openexeconfiguration.aspx
Также: что сказал Джейсон — обычно это плохая идея.