我可以在 DLL 中嵌入其他文件吗?
Posted
技术标签:
【中文标题】我可以在 DLL 中嵌入其他文件吗?【英文标题】:Can I embed other files in a DLL? 【发布时间】:2010-12-25 19:55:17 【问题描述】:我正在通过 API 为另一个应用程序编写插件。插件分布在 DLL 中。是否可以在 DLL 文件中嵌入其他文件,如 pdf、图像、chm 帮助文件等...我希望能够为我的插件提供文档,但我仍然希望保留分发插件的能力-in 作为单个文件,用户只需拖放到应用程序上即可安装。
【问题讨论】:
【参考方案1】:是的,你可以这样做。
将资源文件添加到您的项目中。在 Visual Studio 中打开资源文件,然后单击“插入资源”。您可以选择不同类型的资源,包括外部文件。
Visual Studio 将为您生成代码,以便您可以在运行时通过 Resources
标识符从文件名中将文件作为字节数组检索。
【讨论】:
【参考方案2】:当然,您可以在 DLL 中嵌入资源。然后在运行时你只需:
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("com.***.plugin.example.Foo.pdf");
这将为您提供一个流到您的 DLL 中嵌入的 Foo.pdf
文件。请注意,资源名称必须由您从中调用方法的类型的名称空间限定范围。
【讨论】:
如果您不确定文件名 Foo.pdf 前面应该是什么命名空间。在调试中运行它,string[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();
【参考方案3】:
当然,只需在 VS.NET 中将它们设为“嵌入式资源”(假设您正在使用它)。然后,您可以通过资源 API 或简单地使用 Assembly.GetManifestResourceStream() 来阅读它们。
【讨论】:
【参考方案4】:作为替代选项,如果您需要在用户机器上解压并保存文件(比如您希望在应用外部访问的 chm 文件),您也可以对 zip 文件执行相同操作。
您说您希望将文件“拖动”到您的应用中。只需让您的 DDE 事件检查文件是否为 zip(甚至可能使用带有元数据的 jar 之类的东西)并解压缩必要的文件,包括实际的插件。
这与 openxml 文档的想法相同,它们实际上只是变相的拉链。
【讨论】:
以上是关于我可以在 DLL 中嵌入其他文件吗?的主要内容,如果未能解决你的问题,请参考以下文章