使用VS2005和VB.NET。
我有一个项目,它是我创建的数据存储的API。编译时创建api.dll
。
我在同一个解决方案中有第二个项目,该项目具有API项目的项目引用,在编译时将创建wrapper.dll
。这基本上是特定于应用程序的API的包装器。
当我在其他应用程序中使用wrapper.dll
时,我必须将wrapper.dll
和api.dll
复制到我的新应用程序中。如何让包装器项目将api.dll
编译成自身,以便我只有一个dll
可以移动?
答案 0 :(得分:1)
您可能必须使用ILMerge之类的工具来合并两个程序集。
答案 1 :(得分:1)
有一种更简单的方法。只需在wrapper.dll项目中创建指向api.dll中源文件的快捷方式(在Visual Studio中称为链接文件)。这将把你的源代码直接编译成wrapper.dll。
答案 2 :(得分:1)
@Jas,它是Visual Studio中的一项特殊功能。该程序在this blog entry, called "Sharing a Strong Name Key File Across Projects"中列出。该示例用于共享强名称密钥文件,但适用于任何类型的文件。
简而言之,您右键单击项目并选择“添加现有项目”。浏览到要链接的文件的目录,然后突出显示一个或多个文件。如果只是点击“添加”或“打开”(取决于您的Visual Studio版本),请单击该按钮右侧的小向下箭头。如果您使用的是Visual Studio 2003,或者使用2005年的“添加”或“添加为链接”(我不确定2008),您将看到“打开”或“链接文件”的选项。在任何情况下,选择涉及“链接”一词的那个。然后你的项目将基本上引用该文件 - 它可以从它所在的原始项目和你“链接”它的项目中访问。
这是一种创建包含wrapper.dll和api.dll的所有功能的程序集的便捷方法,但是每次向api.dll添加新文件时都必须记住重复此过程(但是不是wrapper.dll)。
答案 3 :(得分: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
加载程序集