2

WPF ユーザー コントロール ライブラリに関連付けられた構成ファイルを作成しました。アプリケーションをデバッガーまたは単独で実行する場合、構成は、ライブラリーのコンテキストで実行される次のコードを使用して正常にロードされます。

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 デザイナーで表示されたときに読み込まれるように、構成ファイルの場所を指定する方法はありますか?

4

1 に答える 1

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");
}
于 2011-11-02T11:16:01.580 に答える