从DLL文件中读取资源

我有两个Visual Basic 2008项目 – 一个是类库项目,另一个是Windows Forms项目。 在类库项目中,我在项目资源中定义了一些字符串(项目属性>“资源”选项卡)。

我构建该类库项目并从调试文件夹中获取DLL文件,并在我的Windows窗体项目中添加为参考。

如何从引用的DLL文件中读取这些字符串?

我想你只需使用System.Reflection.Assembly.Load加载另一个程序集,然后使用带有程序集的System.Resources.ResourceManager的构造函数。

注意,我不认为它需要参考这个工作。

虽然您可以像h建议的那样动态加载DLL,但是可以像使用的那样使用引用。 事实上,我建议使用引用,除非您有特殊要求动态加载资源程序集。

至于访问资源,您需要做一些事情。

  • 在资源程序集中,您需要确保资源是公共的。 默认情况下,资源设置为internal,这意味着您将无法在winforms应用程序中看到资源。 双击Properties \ Resources.resx以打开资源视图。 在顶部工具栏中,您将看到combobox下拉旁边的标签“访问修改器”。 将选择更改为公开。

  • 您需要从表单应用程序引用程序集。 你已经声明你已经这样做了。 请注意,更好的方法是创建一个包含两个项目的解决方案。 然后在表单应用程序中选择添加引用。 单击顶部的“项目”选项卡。 双击资源DLL项目名称。 这比直接引用调试DLL更好,因为这意味着如果您在表单应用程序中的发布版本和调试版本之间进行更改,它将自动构建资源程序集的匹配版本/调试版本。

  • 添加引用后,您可以简单地引用资源DLL中的类型,例如

ResourceDLLNamespace.Properties.Resource.ResourceName

只需注意,如果您对表单应用程序和资源DLL使用相同的命名空间,则需要注意类型名称冲突。 在这种情况下,您的表单应用程序都可以访问它自己的Properties.Resources类以及资源DLL的类。 你可以做两件事来避免这种情况:

  1. 在两个程序集之间使用不同的命名空间
  2. 在资源程序集中不包含默认的Properties \ Resources.resx资源字典。 删除它并手动添加新资源,即添加新项目,然后选择“资源文件”。 您应该会发现无法将新资源字典添加到Properties文件夹中 – 根据需要将其添加到根目录或其他文件夹中。 由于位于不同的文件夹中,这将自动为其提供不同的类型名称。 您仍然可能希望避免使用资源文件名“Resources”,但是,就好像您通过using语句在范围内拥有所有相关的命名空间一样,您将遇到编译器不知道要使用哪个版本的资源的相同问题。

-Donovan