
Buenas
si has extendido las capacidades iniciales de Enterprise Library 2.0 y quieres migrar las mismas a Enterprise Library 3.1, seguramente te encuentres con el siguiente error despues de actualizar las referencias.
Excepción
------ Build started: Project: XX, Configuration: Debug Any CPU ------
...
...\CategorySourceSerializableConfigurationSection.cs(31,12): error CS0305: Using the generic type 'Microsoft.Practices.EnterpriseLibrary.Common.Configuration.NameTypeConfigurationElementCollection<T,TCustomElementData>' requires '2' type arguments
...
Compile complete -- 5 errors, 0 warnings
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Nota: en mi infinita ignorancia y acostumbrado a la actualización de 1.1 a 2.0, pensé que simplemente actualizando las referencias del proyecto / solución a Enterprise Library 3.1 todo funcionaba pero una vez más la realidad me puso a trabajar un poco más de la cuenta.
Pues bien, la excepción en tiempo de compilación hace referencia a
Microsoft.Practices.EnterpriseLibrary.Common.Configuration.NameTypeConfigurationElementCollection
en la línea 6 del siguiente fragmento de código:
1 /// <summary>
2 /// Gets the CategorySource providers.
3 /// </summary>
4 /// <value>The CategorySource providers.</value>
5 [ConfigurationProperty(CategorySourceSerializableConfigurationSection.providersProperty_)]
6 public NameTypeConfigurationElementCollection<CategorySourceConfigurationElement>
7 CategorySourceProviders
8 {
9 get
10 {
11 return (NameTypeConfigurationElementCollection
12 <CategorySourceConfigurationElement>)
13 this[CategorySourceSerializableConfigurationSection.providersProperty_];
14 }
15 }
Cómo a esta información no la tenía muy fresca en mi memoria me tuve que poner a leer (y aprender !!!) de nuevo el funcionamiento del namespace Microsoft.Practices.EnterpriseLibrary.Common.Configuration y después de una serie de pruebas solucioné el problema agregando el 2do argumento que también hace referencia al mismo tipo que el 1ro. Por ejemplo:
1 /// <summary>
2 /// Gets the CategorySource providers.
3 /// </summary>
4 /// <value>The CategorySource providers.</value>
5 [ConfigurationProperty(CategorySourceSerializableConfigurationSection.providersProperty_)]
6 public NameTypeConfigurationElementCollection<CategorySourceConfigurationElement, CategorySourceConfigurationElement>
7 CategorySourceProviders
8 {
9 get
10 {
11 return (NameTypeConfigurationElementCollection
12 <CategorySourceConfigurationElement>)
13 this[CategorySourceSerializableConfigurationSection.providersProperty_];
14 }
15 }
La base de este comportamiento es que el 1er parámetro define el tipo de NameTypeConfigurationElement que contiene la colección, y el 2do parámetro es el tipo para la configuración personalizada de la colección que se implementa para el Application Block. (en versiones anteriores no era necesaria esta distinción)
Finalmente viernes a la tarde problema solucionado !!!!
Saludos @ Here
El Bruno
Crossposting from
ElBruno.com