Estoy construyendo una aplicación extensible que cargará ensamblados adicionales en tiempo de ejecución a través del Assembly.LoadFile()
. Esos ensamblajes adicionales contendrán cosas como diccionarios de recursos WPF (máscaras, etc.), recursos simples (Resx) y/o clases de complementos. El ensamblaje tampoco puede contener clases públicas, solo recursos o diccionarios de recursos..Net 4 - Incluye información personalizada en el ensamblado
Estoy buscando una manera de identificar un ensamblaje, cosas como un nombre descriptivo (como "Máscaras adicionales" o "Navegador integrado"), el tipo funcional de un conjunto (SkinsLibrary, SkinsLibrary | PluginLibrary, etc.) y información adicional (como ConflictsWith (new [] {"SkinsLibrary", "BrowserPlugin").
Hasta ahora estoy usando una convención para nombrar ensamblajes (*.Skins.*.dll
, etc.). En cada ensamblaje tengo un maniquí vacío clase que es solo un marcador de posición para atributos de clases personalizadas que contienen la información real (en todo el conjunto), pero que se siente como un truco. ¿Hay alguna manera simplificada y estándar para manejar esto?
Estoy desarrollando el sistema de cargador central y otros desarrolladores de mi equipo desarrollarán esos conjuntos adicionales, por lo que me gustaría minimizar las convenciones y los detalles de plomería.
Los archivos de recursos, si tienen el nombre adecuado (name.lang.resx), deben cargarse automáticamente para el idioma actual, si tiene un recurso "predeterminado" definido. Framework hace eso por ti. ¿Por qué necesita cargar recursos manualmente? –
Porque esos archivos de recursos se compilan en un ensamblado y hay muchos de ellos. Por ejemplo, tengo los conjuntos Skin1 y Skin2, y la configuración indica que la aplicación usa Skin1, por lo que la aplicación no debería cargarlos automáticamente. Sin embargo, la aplicación debe conocer la existencia de Skin2 para que el usuario pueda seleccionarla. –
¿Es posible tener máscaras en forma de implementación de alguna interfaz (ISkin?), Entonces ¿usted escribe su propia implementación en una dll y agrega los recursos necesarios a esa dll? Para cada piel, tendría un ensamblaje y todos los recursos necesarios para ese ensamblaje a los que se hace referencia se cargan automáticamente. Solo tendría que preocuparse de que dos máscaras no usen recursos con el mismo nombre (fácil de prevenir al agregar skinname a la convención de nombres). –