2008-08-27 51 views
3

使用VS2005和VB.NET。编译引用的dll

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

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

回答

1

@Jas,这是Visual Studio中的一个特殊功能。程序概述于this blog entry, called "Sharing a Strong Name Key File Across Projects"。该示例用于共享强名称密钥文件,但适用于任何类型的文件。

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

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

1

您可能必须使用工具(如ILMerge)来合并这两个程序集。

1

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

+0

字面上是一个Windows的快捷方式或有一些方法来添加一个“链接的文件”,通过VS?我找不到任何引用添加链接文件的能力。 – Jas 2008-08-27 19:08:30

0

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

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