2

Я создал файл конфигурации, связанный с библиотекой пользовательского управления WPF. При запуске приложения в отладчике или на своем собственном конфигурационные нагрузки просто отлично, используя следующий код, который запускается в контексте библиотеки:ConfigurationationManager.OpenMappedExeConfiguration не загружает файл конфигурации в XAML-дизайнере

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
fileMap.ExeConfigFilename = "MapControl.dll.config"; 

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 

if (config != null) 
{ 
    _Instance = (MapControlConfiguration)config.GetSection("MapControlConfiguration"); 
} 

Однако, когда я пытаюсь просмотреть элемент управления в Visual Studio 2010 XAML-дизайнер, файл конфигурации не загружается. Используя Process Monitor, я решил, что он пытается загрузить файл конфигурации в следующем месте: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MapControl.dll.config. Это печально, так как это, конечно, не каталог, содержащий файл конфигурации. ConfigurationManager.OpenMappedExeConfiguration ожидает, что файл конфигурации будет относиться к исполняемому файлу, но в контексте конструктора XAML сам по себе не существует исполняемого файла. Есть ли способ указать местоположение конфигурационного файла, чтобы он загружался, когда элемент управления просматривается в дизайне XAML?

ответ

0

Вы можете использовать метод System.ComponentModel.DesignerProperties.GetIsInDesignMode, чтобы узнать, находитесь ли вы в режиме разработки или нет. Например:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) 
{ 
    fileMap.ExeConfigFilename = "F:\ull\Path\To\Your\Debug\MapControl.dll.config"; 
} 
else 
{ 
    fileMap.ExeConfigFilename = "MapControl.dll.config"; 
} 

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 

if (config != null) 
{ 
    _Instance = (MapControlConfiguration)config.GetSection("MapControlConfiguration"); 
}