В консольном приложении .NET Win я хотел бы получить доступ к файлу App.config в месте, отличном от двоичного файла консольного приложения. Например, как C: \ bin \ Text.exe получить свои настройки из C: \ Test.exe.config?





Используйте следующее (не забудьте включить сборку System.Configuration)
ConfigurationManager.OpenExeConfiguration(exePath)
Вы можете установить его, создав новый домен приложения:
AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ConfigurationFile = fileLocation;
AppDomain add = AppDomain.CreateDomain("myNewAppDomain", securityInfo, domainSetup);
using System.Configuration;
Configuration config =
ConfigurationManager.OpenExeConfiguration("C:\Test.exe");
Затем вы можете получить доступ к настройкам приложения, строкам подключения и т. д. Из экземпляра конфигурации. Это, конечно, предполагает, что файл конфигурации правильно отформатирован и ваше приложение имеет доступ для чтения к каталогу. Обратите внимание, что путь - нет "C: \ Test.exe.config". Метод ищет файл конфигурации, связанный с указанным вами файлом. Если вы укажете «C: \ Test.exe.config», он будет искать «C: \ Test.exe.config.config». Как-то неубедительно, но понятно, я думаю.
Ссылка здесь: http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openexeconfiguration.aspx
Один из недостатков этого метода заключается в том, что файл «C: \ Test.exe» должен существовать, даже если это недопустимый исполняемый файл.
А что насчет всего, что предполагает, что у вас есть строка подключения в вашем app.config, это ваша корзина? например EntityFramework, который автоматически извлекает строку подключения из app.config. Вопрос в том, как я могу сказать диспетчеру конфигурации, что он ищет мою конфигурацию в каком-либо месте. не создавать экземпляр из некоторого места и передавать его
Похоже, что для этого можно использовать метод AppDomain.SetData. В документации указано:
You cannot insert or modify system entries with this method.
Тем не менее, похоже, что это работает. В документации по методу AppDomain.GetData перечислены доступные системные записи, интересная запись "APP_CONFIG_FILE".
Если мы установим "APP_CONFIG_FILE" до того, как будут использованы какие-либо настройки приложения, мы сможем изменить место загрузки app.config. Например:
public class Program
{
public static void Main()
{
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Temp\test.config");
//...
}
}
Я нашел это решение, задокументированное в этот блог, и более полный ответ (на связанный вопрос) можно найти в здесь.
AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ConfigurationFile = @"D:\Mine\Company\";
string browserName = ConfigurationManager.AppSettings["browser"];
Связанный вопрос: stackoverflow.com/questions/6150644/…