3

使用 VS2005 和 VB.NET。

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

我在同一个解决方案中有第二个项目,它有一个对 API 项目的项目引用,编译时将创建wrapper.dll. 这基本上是特定于应用程序的 API 的包装器。当我wrapper.dll在其他应用程序中使用时,我必须复制wrapper.dll并复制api.dll到我的新应用程序。如何让包装器项目api.dll自行编译,以便我只有一个dll可以移动?

4

4 回答 4

1

您可能必须使用诸如ILMerge之类的工具来合并这两个程序集。

于 2008-08-27T18:39:33.507 回答
1

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

于 2008-08-27T18:41:13.130 回答
1

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

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

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

于 2008-08-28T10:56:44.860 回答
0

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

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

于 2008-08-27T18:51:32.230 回答