从 DLL 文件中读取资源

Posted

技术标签:

【中文标题】从 DLL 文件中读取资源【英文标题】:Read resources from a DLL file 【发布时间】:2010-05-05 06:51:55 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

虽然您可以按照 ho 的建议动态加载 DLL,但您也可以使用引用。事实上,我建议您使用引用,除非您对动态加载资源程序集有特殊要求。

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

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

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

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

ResourceDLLNamespace.Properties.Resource.ResourceName

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

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

-多诺万

【讨论】:

你能看看我的问题吗?我对来自 dll 的资源有疑问。 ***.com/questions/24070892/…【参考方案2】:

我认为您只需使用 System.Reflection.Assembly.Load 加载另一个程序集,然后使用 System.Resources.ResourceManager 的构造函数来获取程序集。

请注意,我认为它不需要参考即可。

【讨论】:

Resources.resx.vb中Resources.resx的类名是My.Resources。我应该引用什么名称? Me.rm = New ResourceManager(("MyClassLibrary.Resources"), assembly) 这样对吗? 不确定,但似乎合理。虽然我建议使用多诺万的答案,因为这听起来可能更适合你

以上是关于从 DLL 文件中读取资源的主要内容,如果未能解决你的问题,请参考以下文章

C#项目中如何调用C#写的dll中的资源文件,如 xml文件

WPF 中.XAML文件如何读取资源文件?

从 jar 中读取资源文件

从 C# 资源中读取文本文件

(转)java 从jar包中读取资源文件

WinAPI - 从 DLL 加载资源