2

我創建了一個與WPF用戶控件庫關聯的配置文件。當運行在調試器或自己的配置負載就好使用下面的代碼,這是在庫的上下文中運行的應用程序:ConfigurationManager.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設計師,配置文件將不會加載。使用進程監視器,我確定它試圖在以下位置加載配置文件: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"); 
}