2

WPFユーザーコントロールライブラリに関連付けられた構成ファイルを作成しました。私は、Visual Studioでのコントロールを表示しようとすると、しかしConfigurationMap.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"); 
} 

:コンフィグ負荷がうまく、ライブラリのコンテキストで実行され、次のコードを使用して、デバッガや、独自のアプリケーションを実行する場合2010のXAMLデザイナでは、構成ファイルが読み込まれません。 Process Monitorを使用して、configファイルを次の場所にロードしようとしています。C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MapControl.dll.config。これは確かに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"); 
} 
関連する問題