我目前工作的一个VSTO项目,我有5个.settings
文件:迭代通过设置文件
Settings.settings
(默认)s201213.settings
s201314.settings
s201415.settings
s201516.settings
随着时间的推移,将会有更多的设置文件包括在相同的命名约定('s'后面是纳税年度)之后。
我知道我可以遍历一个设置文件,但有没有一种方法来遍历实际的设置文件本身?
我试过的东西,如:
public void Example()
{
System.Collections.IEnumerator testSetting = MyAddIn.Properties.s201213.Default.Properties.GetEnumerator();
while (testSetting.MoveNext())
{
System.Diagnostics.Debug.WriteLine("Setting:\t" + testSetting.Current.ToString());
}
}
这显然只有通过一个单一的设置文件迭代,但我似乎无法弄清楚通过所有的设置文件作为一个集合迭代的逻辑,而没有明确地命名代码中的每一个。我希望这是有道理的,任何帮助表示赞赏。
更新:
我觉得我用下面的代码取得了一些进展:
foreach(Type test in Assembly.GetExecutingAssembly().GetTypes())
{
if (System.Text.RegularExpressions.Regex.IsMatch(test.Name, "^s[0-9]{6}$"))
{
PropertyInfo value = test.GetProperty("LEL");
try
{
System.Diagnostics.Debug.WriteLine("Name:\t" + test.Name +
"\nNameSpace:\t" + test.Namespace +
"\nProperty:\t" + test.GetProperty("LEL").ToString() +
"\n");
}
catch(Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
}
}
}
这似乎是认识的设置文件和存储的值:
输出:
Name: s201213
NameSpace: MyAddIn.Properties
Property: Double LEL
Name: s201314
NameSpace: MyAddIn.Properties
Property: Double LEL
Name: s201415
NameSpace: MyAddIn.Properties
Property: Double LEL
Name: s201516
NameSpace: MyAddIn.Properties
Property: Double LEL
但是,我似乎无法得到“LEL”设置的实际值,应该返回Double
?
月2日更新
其实我已经放弃了,决定使用本地数据库,而不是 - 但我还是想知道,如果这是可能的,而且我认为其他人会喜欢我也知道,所以我会抛出赏金来尝试并产生一些兴趣。
谢谢,我会尽快回到我自己的个人电脑上试试这个 - 所以如果我明白了,这是解析XML配置文件的值而不是?从来没有想过...... _(tag edi )_ –
请原谅我的无知,因为我仍然在学习C#和VS的基础知识 - 'GetSettingFilesValues.exe.config'不存在于'XLSTART'或'Assembly.GetExecutingAssembly.BaseDirectory '所以我现在硬编码了我的'app.config'文件的路径。它是否正确?我在'section.Settings.Get(“LEL”)''上声明“未将对象引用设置为对象实例”时出现异常。 –
是的,这对于VSTO是正确的,AddIns配置文件是你想要的。在我的例子中,我使用了一个winform应用程序。对于Web开发人员,他们会使用他们的web.config的路径。 –