【解決方法】プログラム内でのキーの使用

[ad_1]

こんにちは。キーのセクションが 3 つある構成ファイルがあります。 セクション1には、開始する必要があるexeファイルへのパスがあり、次のステップでセクション2とセクション3のキー(値)をファイルに挿入します(1つの文字列に結合します)。chatgptを使用しようとしますが、循環し続けます。

どのセクションからも値を取得できません。かつては 1 つのセクションでは正しかったのですが、今は正しくありません。

返信ありがとうございます。

私が試したこと:

アプリ構成:

<configuration>	
		<configSections>
			<sectionGroup name="mySettingsGroup">
				<section name="section1" type="System.Configuration.NameValueSectionHandler" allowExeDefinition="MachineToLocalUser" />
				<section name="section2" type="System.Configuration.NameValueSectionHandler" allowExeDefinition="MachineToLocalUser" />
				<section name="section3" type="System.Configuration.NameValueSectionHandler" allowExeDefinition="MachineToLocalUser" />

				<!-- Další sekce... -->
			</sectionGroup>
		</configSections>

	<mySettingsGroup>
		<section1>
			<add key="mlcmd" value="C:\Users\cen65842\Documents\SCServer_mlcmd\mlcmd.exe"/>
		</section1>
		<section2>
			<add key="t_switch_app" value="-cshost"/>
			<add key="karel" value="-csfhost"/>
			<add key="petr" value="-cshost"/>
			<add key="jirka" value="-cshsost"/>
		</section2>

			<section3>
			<add key="rut_messagesrv_p" value="rut_messagesrv_p"/>
				<add key="rut_messagesrv_tds" value="rut_messagesrv_asd"/>
				<add key="rut_messagesrv_sad" value="rut_messagesrv_asd"/>
				<add key="rut_messagesrv_asd" value="rut_messagesrv_asd"/>
		</section3>
    <!-- Další sekce... -->
	</mySettingsGroup>
	
	
</configuration>

コード:

     var configFile = @"C:\Users\cen65842\source\repos\Genesys_automation_tool\Genesys_automation_tool\App.config";

            var configMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };
            var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

            // Get the section group
            var sectionGroup = config.GetSectionGroup("mySettingsGroup");

            if (sectionGroup != null)
            {
                foreach (var sectionName in sectionGroup.Sections.Keys)
                {
                    var section = (ConfigurationSection)sectionGroup.Sections[sectionName.ToString()];

                    if (section is AppSettingsSection appSettingsSection)
                    {
                        var keyValuePairs = new Dictionary<string, string>();
                        foreach (string key in appSettingsSection.Settings.AllKeys)
                        {
                            string value = appSettingsSection.Settings[key].Value;
                            keyValuePairs[key] = value;
                        }

                        foreach (var kvp in keyValuePairs)
                        {
                            string key = kvp.Key;
                            string value = kvp.Value;

                            if (!string.IsNullOrEmpty(value))
                            {
                                var argument1 = value;
                                var argument2 = GetArgumentFromSection(sectionGroup, "section2", key);
                                var argument3 = GetArgumentFromSection(sectionGroup, "section3", key);

                                StartProcess(null, argument2, argument3); // Argument 1 is null, Argument 2 is the value from section2, Argument 3 is the value from section3
                            }
                        }
                    }
                    else
                    {
                        var sectionXml = new XmlDocument();
                        sectionXml.LoadXml(section.SectionInformation.GetRawXml());

                        var keyValues = sectionXml.SelectNodes($"/{sectionName.ToString()}/add");
                        if (keyValues != null)
                        {
                            foreach (XmlNode keyValue in keyValues)
                            {
                                string key = keyValue.Attributes["key"]?.Value;
                                string value = keyValue.Attributes["value"]?.Value;

                                if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
                                {
                                    var argument1 = value;
                                    var argument2 = GetArgumentFromSection(sectionGroup, "section2", key);
                                    var argument3 = GetArgumentFromSection(sectionGroup, "section3", key);

                                    StartProcess(null, argument2, argument3); // Argument 1 is null, Argument 2 is the value from section2, Argument 3 is the value from section3
                                }
                            }
                        }
                    }
                }
            }

            Console.ReadLine();
        }

        private static string GetArgumentFromSection(ConfigurationSectionGroup sectionGroup, string sectionName, string key)
        {
            var section = sectionGroup.Sections[sectionName];
            if (section != null)
            {
                var sectionXml = new XmlDocument();
                sectionXml.LoadXml(section.SectionInformation.GetRawXml());

                var keyValueNode = sectionXml.SelectSingleNode($"/{sectionName}/add[@key='{key}']");
                if (keyValueNode != null && keyValueNode.Attributes != null)
                {
                    var argument = keyValueNode.Attributes["value"]?.Value;
                    return argument;
                }
            }

            return null;
        }

        private static void StartProcess(string executablePath, string argument2, string argument3)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = @"C:\Users\cen65842\Documents\SCServer_mlcmd\mlcmd.exe";

            string arguments = $"{argument2} {argument3}";
            startInfo.Arguments = arguments;
 Process process = new Process();
            process.StartInfo = startInfo;
            process.Start();
        
        }
    }
}

解決策 1

これは、App.Config ファイルでのカスタム セクションの使用に関する質問をカバーします。 方法: ConfigurationSection を使用してカスタム構成セクションを作成する | Microsoft Learn[^]

さらに多くの例が必要な場合は、以下の検索から選択できます。 app.config C# を読む – Google 検索[^]

[ad_2]

コメント

タイトルとURLをコピーしました