我有两个 Visual Basic 2008 项目 - 一个是类库项目,另一个是 Windows 窗体项目。在类库项目中,我在项目资源中定义了一些字符串(项目属性 > 资源选项卡)。
我构建该类库项目并从调试文件夹中获取 DLL 文件并将其添加为我的 Windows 窗体项目中的引用。
如何从引用的 DLL 文件中读取这些字符串?
最佳答案
虽然您可以按照 ho 的建议动态加载 DLL,但也可以像您所做的那样使用引用。事实上,除非您有动态加载资源程序集的特殊要求,否则我建议使用引用。
关于访问资源,您需要做一些事情。
在资源集合中,您需要确保资源是公开的。默认情况下,资源设置为内部资源,这意味着您不会在 winforms 应用程序中看到资源。双击 Properties\Resources.resx 打开资源 View 。在顶部工具栏中,您会在组合框下拉列表旁边看到一个标签“访问修饰符”。将选择更改为公开。
您需要从表单应用程序中引用程序集。你已经声明你已经这样做了。请注意,更好的方法是创建一个包含这两个项目的解决方案。然后在表单应用程序中选择添加引用。单击顶部的“项目”选项卡。双击资源 DLL 项目名称。这比直接引用调试 DLL 更有效,因为这意味着如果您在表单应用中的发布版本和调试版本之间进行更改,它将自动构建资源程序集的匹配发布/调试版本。
添加引用后,您可以简单地从资源 DLL 中引用类型,例如
ResourceDLLNamespace.Properties.Resource.ResourceName
请注意,如果您为表单应用程序和资源 DLL 使用相同的命名空间,则需要注意类型名称冲突。在这种情况下,您的表单应用程序都可以访问它自己的 Properties.Resources 类以及资源 DLL 的类。您可以做两件事来避免这种情况:
- 在两个程序集之间使用不同的命名空间
- 在资源程序集中不要包含默认的 Properties\Resources.resx 资源字典。删除它并手动添加新资源,即添加新项目并选择“资源文件”。您应该发现您将无法将新的资源字典添加到 Properties 文件夹 - 根据需要将其添加到根目录或其他文件夹。由于位于不同的文件夹中,这将自动为其赋予不同的类型名称。但是,您仍然可能希望避免使用资源文件名“Resources”,就好像您通过 using 语句在范围内拥有所有相关的命名空间一样,您将遇到同样的问题,即编译器不知道要使用哪个版本的 Resources。
-多诺万
关于c# - 从 DLL 文件中读取资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2771130/