使用VS2005和VB.NET。编译引用的dll
我有一个项目是我创建的数据存储的API。编译时创建api.dll
。
我有相同的解决方案中的第二个项目,有一个项目引用的API项目,编译时将创建wrapper.dll
。这基本上是特定于应用程序的API的包装。 当我在其他应用程序中使用wrapper.dll
时,我必须将wrapper.dll
和api.dll
复制到我的新应用程序中。我怎样才能让包装项目自己编译api.dll
,以便我只有一个dll
移动?
使用VS2005和VB.NET。编译引用的dll
我有一个项目是我创建的数据存储的API。编译时创建api.dll
。
我有相同的解决方案中的第二个项目,有一个项目引用的API项目,编译时将创建wrapper.dll
。这基本上是特定于应用程序的API的包装。 当我在其他应用程序中使用wrapper.dll
时,我必须将wrapper.dll
和api.dll
复制到我的新应用程序中。我怎样才能让包装项目自己编译api.dll
,以便我只有一个dll
移动?
@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)。
您可能必须使用工具(如ILMerge)来合并这两个程序集。
有一个更简单的方法。只需在您的wrapper.dll项目中创建指向api.dll中的源文件的快捷方式(在Visual Studio中称为链接文件)。这将直接将你的源码编译成wrapper.dll。
我认为你可以编译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
字面上是一个Windows的快捷方式或有一些方法来添加一个“链接的文件”,通过VS?我找不到任何引用添加链接文件的能力。 – Jas 2008-08-27 19:08:30