使用VS2005和VB.NET。

我有一个项目,它是我创建的数据存储的 API。编译时创建 api.dll.

我在同一解决方案中有第二个项目,它有一个对 API 项目的项目引用,编译时将创建 wrapper.dll. 。这基本上是特定于应用程序的 API 的包装器。当我使用 wrapper.dll 在其他应用程序中,我必须复制 wrapper.dllapi.dll 到我的新应用程序。我怎样才能让包装项目编译 api.dll 融入自身,这样我就只有一个 dll 四处走动?

有帮助吗?

解决方案

@Jas,这是 Visual Studio 中的一个特殊功能。该程序概述于 此博客条目名为“跨项目共享强名称密钥文件”. 。该示例用于共享强名称密钥文件,但适用于任何类型的文件。

简而言之,右键单击您的项目并选择“添加现有项目”。浏览到要链接的文件的目录并突出显示该文件或多个文件。不再只是点击“添加”或“打开”(取决于您的 Visual Studio 版本),而是单击该按钮右侧的小向下箭头。如果您使用的是 Visual Studio 2003,您将看到“打开”或“链接文件”选项,或者使用 2005(我不确定 2008)的“添加”或“添加为链接”选项。无论如何,请选择包含“链接”一词的选项。然后,您的项目本质上将引用该文件 - 可以从其所在的原始项目以及您“链接”到它的项目访问该文件。

这是创建包含wrapper.dll和api.dll所有功能的程序集的便捷方法,但您必须记住每次向api.dll添加新文件(但不是wrapper.dll)时都必须重复此过程。 dll)。

其他提示

有一个更简单的方法。只需在您的wrapper.dll 项目中创建指向api.dll 中的源文件的快捷方式(在Visual Studio 中称为链接文件)即可。这会将您的源代码直接编译成wrapper.dll。

您可能需要使用一个工具,例如 伊尔梅格, ,合并两个程序集。

我认为你可以将 api.dll 作为资源编译到wrapper.dll中。然后从 api.dll 手动访问该资源并手动加载它。我已从磁盘手动加载程序集,因此从流加载程序集应该没有任何不同。

我会尝试将 dll 作为文件包含在项目中,类似于包含文本或 xml 文件(除了其用于编译的项目参考之外)。然后,我将生成操作设置为“嵌入式资源”。 在包装器 .dll 中,我将使用 Assembly 对象访问 api.dll,就像任何其他嵌入式资源一样。然后,您还需要使用 Assembly.Load 加载程序集 http://msdn.microsoft.com/en-us/library/system.reflection. assembly.load.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top