2010-05-05 38 views
9

Tengo dos proyectos de Visual Basic 2008: uno es un proyecto de biblioteca de clase y otro es un proyecto de Windows Forms. En el proyecto de biblioteca de clase, he definido algunas cadenas en los recursos del proyecto (propiedades del proyecto> pestaña Recursos).Leer recursos de un archivo DLL

Construyo ese proyecto de biblioteca de clase y obtengo el archivo DLL de la carpeta de depuración y lo agrego como referencia en mi proyecto de Windows Forms.

¿Cómo leo esas cadenas del archivo DLL al que se hace referencia?

Respuesta

7

Creo que solo usa System.Reflection.Assembly.Load para cargar el otro conjunto y luego usa el constructor de System.Resources.ResourceManager que toma un conjunto.

Aquí hay un enlace que muestra un ejemplo de cómo hacer esto:

http://msdn.microsoft.com/en-us/library/aa984408%28VS.71%29.aspx

Nota, no creo que se necesita una referencia para que esto funcione.

+0

El nombre de la clase de Resources.resx en Resources.resx.vb es My.Resources. ¿Con qué nombre debo hacer referencia? Me.rm = Nuevo ResourceManager (("MyClassLibrary.Resources"), ensamblaje) ¿Es esto correcto? –

+0

No estoy seguro, pero parece plausible. Aunque sugeriría usar la respuesta de Donovan, ya que parece que podría ser más adecuado para usted –

12

Si bien puede cargar dinámicamente la DLL como sugiere ho, está bien utilizar una referencia como lo ha hecho. De hecho, recomendaría usar una referencia a menos que tuvieras un requisito particular para cargar dinámicamente el conjunto de recursos.

En cuanto al acceso a los recursos, hay algunas cosas que debe hacer.

  • En el conjunto de recursos, deberá asegurarse de que los recursos sean públicos. De forma predeterminada, los recursos están configurados en interno, lo que significa que no verá los recursos en la aplicación de winforms. Haga doble clic en Properties \ Resources.resx para abrir la vista de recursos. En la barra de herramientas superior, verá una etiqueta "Modificador de acceso" junto a un menú desplegable desplegable. Cambiar la selección a público.

  • Deberá hacer referencia al ensamblaje desde la aplicación de formularios. Usted ha declarado que ya ha hecho esto. Solo una nota que una mejor manera de hacer esto es crear una solución que contenga ambos proyectos. Luego, en la aplicación de formularios, elige agregar referencia. Haga clic en la pestaña Proyectos en la parte superior. Haga doble clic en el nombre del proyecto DLL de recursos. Esto funciona mejor que hacer referencia directamente a la DLL de depuración, ya que significa que si cambia entre una versión de compilación y depuración en su aplicación de formularios, se compilará automáticamente una versión de depuración/depuración de su conjunto de recursos.

  • Una vez que haya agregado la referencia, puede simplemente hacer referencia al tipo de los recursos DLL, p. Ej.

ResourceDLLNamespace.Properties.Resource.ResourceName

Sólo una nota, hay que estar al tanto de las colisiones de nombres de tipo si está utilizando el mismo espacio de nombres para su aplicación y formas DLL de recursos. En esta situación, tanto la aplicación de formularios tendrá acceso a su propia clase Properties.Resources como a la de la DLL de recursos. Puede hacer dos cosas para evitar esto:

  1. utilizar un espacio de nombres diferente entre los dos conjuntos
  2. En el conjunto de recursos no incluyen un diccionario de recursos Propiedades \ Resources.resx defecto. Eliminar y agregar manualmente un nuevo recurso, es decir, agregar nuevo elemento y seleccionar "Archivo de recursos". Debería encontrar que no podrá agregar el nuevo diccionario de recursos a la carpeta Propiedades; agréguelo a la raíz o a alguna otra carpeta que necesite.Esto le dará automáticamente un nombre de tipo diferente en virtud de estar en una carpeta diferente. Sin embargo, es posible que desee evitar el uso del nombre del archivo de recursos de "Recursos", ya que si tiene todos los espacios de nombres relevantes en el uso de declaraciones, obtendrá el mismo problema que el compilador no sabrá qué versión de Recursos usar.

-Donovan

+0

¿Podría echar un vistazo a mi pregunta por favor? Tengo problemas con los recursos del dll. http://stackoverflow.com/questions/24070892/resources-dont-load-current-culture – Marc

Cuestiones relacionadas