Sé que llego tarde pero encontré esta solución y funciona perfectamente, así que solo quiero compartirla.
Se trata de la definición de su propia ConfigurationElement
namespace Configuration.Helpers
{
public class ValueElement : ConfigurationElement
{
[ConfigurationProperty("name", IsKey = true, IsRequired = true)]
public string Name
{
get { return (string) this["name"]; }
}
}
public class ValueElementCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new ValueElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ValueElement)element).Name;
}
}
public class MultipleValuesSection : ConfigurationSection
{
[ConfigurationProperty("Values")]
public ValueElementCollection Values
{
get { return (ValueElementCollection)this["Values"]; }
}
}
}
Y en el app.config sólo tiene que utilizar su nueva sección:
<configSections>
<section name="PreRequest" type="Configuration.Helpers.MultipleValuesSection,
Configuration.Helpers" requirePermission="false" />
</configSections>
<PreRequest>
<Values>
<add name="C++"/>
<add name="Some Application"/>
</Values>
</PreRequest>
y cuando la recuperación de datos como este:
var section = (MultipleValuesSection) ConfigurationManager.GetSection("PreRequest");
var applications = (from object value in section.Values
select ((ValueElement)value).Name)
.ToList();
Finalmente, gracias al autor del original post
Entonces, ¿cuál es el sentido de 'ConfigurationManager.AppSettings.GetValues () 'entonces? – Yuck
@Yuck una preguntas el punto de la clase NameValueCollection subyacente - que soporta múltiples valores por clave, pero en realidad no permiten establecer más de una por tecla (AppSettings deben usar internamente el indexador set) - esta es la verdadera causa de la cuestión, en lugar de GetValues () sólo devolver un solo valor. – fusi
Si sólo hay un único valor, que no se encuentra ningún carácter se produce un error? –