编译引用的dll
使用VS2005和VB.NET。
我有一个项目,该项目是我创建的数据存储区的API。编译后会创建" api.dll"。
我在同一解决方案中有第二个项目,该项目具有对API项目的项目引用,该项目在编译时将创建wrapper.dll
。基本上,这是特定于应用程序的API的包装。
在其他应用程序中使用wrapper.dll时,必须将wrapper.dll和api.dll复制到新应用程序中。如何获得包装器项目,将api.dll编译成自身,以便仅移动一个dll?
解决方案
回答
我们可能必须使用ILMerge之类的工具来合并两个程序集。
回答
有一种更简单的方法。只需在wrapper.dll项目中创建指向api.dll中的源文件的快捷方式(在Visual Studio-ese中称为链接文件)即可。它将直接将源代码编译为wrapper.dll。
回答
我认为我们可以将api.dll作为资源编译到wrapper.dll中。然后从api.dll中手动访问该资源并手动加载它。我已经从磁盘手动加载了程序集,因此从Stream加载一个程序集应该没有什么不同。
我会尝试将dll作为文件包含在项目中,类似于包含文本或者xml文件(除了用于编译的项目参考)。然后,将构建操作设置为"嵌入式资源"。在wrapper.dll中,我将像其他任何嵌入式资源一样,使用Assembly对象访问api.dll。然后,我们还需要使用Assembly.Load http://msdn.microsoft.com/zh-cn/library/system.reflection.assembly.load.aspx加载程序集
回答
@Jas,这是Visual Studio中的一项特殊功能。此博客条目中概述了该过程,该条目称为"跨项目共享强名称密钥文件"。该示例用于共享强名称密钥文件,但适用于任何类型的文件。
简要地说,我们右键单击项目,然后选择"添加现有项"。浏览到要链接的文件的目录,并突出显示一个或者多个文件。只需点击"添加"或者"打开"(取决于Visual Studio版本),请单击该按钮右侧的小向下箭头。如果我们使用的是Visual Studio 2003,则将看到"打开"或者"链接文件"的选项,如果使用2005,则将看到"添加"或者"添加为链接"的选项(我不确定是2008)。无论如何,请选择一个包含"链接"一词的链接。然后,项目将实质上引用该文件,该文件可以从其所在的原始项目以及我们与之"链接"的项目中访问。
这是创建包含wrapper.dll和api.dll的所有功能的程序集的便捷方法,但是每次将新文件添加到api.dll(而不是包装器)时,都必须记住要重复此过程。 dll)。