0

別のアプリケーションからロードされた特定のプラグイン.DLLの(移動)ユーザー構成設定のサポートをセットアップするにはどうすればよいですか?

別のアプリケーションからアドイン/プラグインとしてロードされる.DLLがあり、マシン、.dll(=実行可能)、移動ユーザーに基づいて、ロードするメインアプリケーションとは関係なく、このアプリケーションに固有の構成設定を保持したいまたはユーザープロファイル。

System.Configuration.ExeConfigurationFileMap必要なものを提供する可能性が高いクラスを見つけましたが、(プラグイン)アプリケーションに固有の正しいパスを設定する方法がわかりません。

私がこれまでに持っているコードは次のとおりです。

public class MyConfigurationSettings : ConfigurationSection
{
    public static MyConfigurationSettings GetSection (ConfigurationUserLevel ConfigLevel) 
    {
        string configFile = Assembly.GetAssembly(typeof(MyConfigurationSettings)).Location + ".config";
        ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
        configFileMap.ExeConfigFilename = configFile;
        configFileMap.LocalUserConfigFilename = <localUserConfigFile>; // ??? What filename to place here and how to get it based on the current environment ???
        configFileMap.RoamingUserConfigFilename = <roamingUserConfigFile>; // ???;

        System.Configuration.Configuration Config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigLevel);
        // ...
    }
}

誰かが私を正しい方向に向けることができますか?利用可能なドキュメントと検索結果は、私がこれを正しく理解するには混乱しすぎているか、不十分です。申し訳ありませんが、これがばかげた質問のように思われる場合は、私のC#(.NET)スキルは、毎日のパンを稼ぐために使用しないで4年以上経つと錆びてしまいます。

また、これは主に構成設定の管理に関する問題ではなく、インストール固有のアプリケーションインスタンス構成のパスを取得する方法に関する問題だと思います。

4

2 に答える 2

3

設定RoamingUserConfigFilename = RoamingName.configして移動プロファイルの下に置きます。

%AppData%\[AppName]\[Vendor]\[CodedPath]\[Version]\RoamingName.config

またLocalUserConfigFilename = LocalName.config、ローカルプロファイルの下に設定して配置します。

%LocalAppData%\[AppName]\[Vendor]\[CodedPath]\[Version]\LocalName.config

今電話

ConfigurationManager.OpenMappedExeConfiguration(
    exeMap,
    ConfigurationUserLevel.PerUserRoamingAndLocal);

configは次の順序で読み取られます。

MSDNブログのソース。

User.configサンプルについては、以下を検索してc:\Users\[User]\AppDataください。CPの記事も参照してください。

コードサンプル:

public static MyConfigurationSettings GetSection (ConfigurationUserLevel ConfigLevel) 
{
    try
    {
        string appDataPath = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        string localDataPath = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        System.Configuration.ExeConfigurationFileMap exeMap = new ExeConfigurationFileMap();
        exeMap.ExeConfigFilename = System.IO.Path.Combine(appDataPath, @"MyCompany\MyPlugin\Default.config");
        exeMap.RoamingUserConfigFilename = System.IO.Path.Combine(appDataPath, @"MyCompany\MyPlugin\Roaming.config");
        exeMap.LocalUserConfigFilename = System.IO.Path.Combine(localDataPath, @"MyCompany\MyPlugin\Local.config");

        System.Configuration.Configuration Config = ConfigurationManager.OpenMappedExeConfiguration(exeMap,ConfigLevel);

        return (MyConfigurationSettings)Config.GetSection("MyConfigurationSettings");

    }
    catch (Exception ex) {
        // ...
    }
    return null; // or throw an appropriate exception
}
于 2013-02-03T19:29:06.337 に答える
-2

通常、構成を配置した特別なフォルダーから構成をロードし、ローミング(つまり非ローカル)の場所の1つに配置します。OSは、ローミング仕様に従って残りを処理します。

ConfigSectionsの使用法は、そのために構成ファイルを使用する非常に特別な必要性がない限り、まったく関係ありません。過去10年間に私が見た.NETプロジェクトでは、このファイルがユーザー固有の設定に使用されることはありませんでした。

于 2013-02-03T17:45:45.000 に答える