[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]
コメント