从DLL文件中读取资源

时间:2010-05-05 06:51:56

标签: c# vb.net resources

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

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

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

2 个答案:

答案 0 :(得分:12)

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

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

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

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

  • 添加引用后,您只需引用资源DLL中的类型,例如

ResourceDLLNamespace.Properties.Resource.ResourceName

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

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

答案 1 :(得分:7)

我认为您只需使用System.Reflection.Assembly.Load加载其他程序集,然后使用带有程序集的System.Resources.ResourceManager构造函数。

请注意,我认为无需参考此工作。