Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你能把DLL捆绑在一起吗?_C#_Dll_Class Library - Fatal编程技术网

C# 你能把DLL捆绑在一起吗?

C# 你能把DLL捆绑在一起吗?,c#,dll,class-library,C#,Dll,Class Library,我做了一个类库项目。我们叫它ClassA吧。在ClassA中,我需要访问驻留在dll中的一些工具(toolsdl.dll) 在ClassA中,我已将toolsdl.dll添加到项目中,并选择toolsdl.dll文件以始终复制到输出目录。这样库就可以很好地构建和编译,在输出目录中我可以看到ClassA.dll和toolsdl.dll 接下来,我想编写一个应用程序,比如使用ClassA中的方法的App_A。因此,在我的App_A项目中,我添加了对ClassA.dll的引用,以便访问它的名称空间。一

我做了一个类库项目。我们叫它ClassA吧。在ClassA中,我需要访问驻留在dll中的一些工具(toolsdl.dll)

在ClassA中,我已将toolsdl.dll添加到项目中,并选择toolsdl.dll文件以始终复制到输出目录。这样库就可以很好地构建和编译,在输出目录中我可以看到ClassA.dll和toolsdl.dll

接下来,我想编写一个应用程序,比如使用ClassA中的方法的App_A。因此,在我的App_A项目中,我添加了对ClassA.dll的引用,以便访问它的名称空间。一切都很好,它可以构建/编译

问题是,只要我运行App_A,它到达需要使用toolsdl.dll的位置,它就会抛出一个异常“无法加载toolsdl.dll。我不明白为什么它找不到该dll,因为它与ClassA.dll位于同一目录中


我发现,如果我把toolsdl.dll放在App_A的输出目录中,它就工作得很好。有什么办法吗?有没有办法把toolsdl.dll与ClassA.dll捆绑在一起。原因是我的客户将编写他们自己的类似于AppA的应用程序,如果他们只需要在应用程序中引用一个文件就好了ir项目,而不是多个。

Microsoft提供了一个名为的工具。它可能会执行您想要的操作,将多个程序集捆绑到一个文件中

p.S.:解决问题的另一个相当常用的方法是在应用程序的解决方案/项目中添加一个生成后事件,将所需的
toolsdl.dll
复制到输出目录中?大致如下:

xcopy /y /d $(SolutionDir)\lib\ToolsDLL.dll $(OutputDir)\ToolsDLL.dll
(很抱歉,如果我弄错了,我是根据记忆输入的。)


当然,您的客户也必须这样做。但是,他们可能以前也这样做过。

您是否已将DLL添加到项目中,或者您是否已实际添加了对它的引用?您应该执行后者,然后自动为您处理这类事情。听起来您已将实际文件添加到项目中,并将其设置为“复制”


如果您确实希望使用单文件方法,那么请接受其他人的建议,
ILMerge
显然……

您可以使用ILMerge将程序集合并到一个DLL中


您可以使用IL合并工具,也可以在GAC中安装toolsdl.dll


另外,如果你查看App_A的输出,ClassA.dll已经在那里了,那就是它查找toolsdl.dll的地方。

看起来ILMerge只能在.Net程序集上使用。对吗?在我的情况下,toolsdl.dll是由一家芯片制造商提供给我的。我不知道它是否是.Net程序集。这有关系吗?我在Visual Studio中注意到Studio如果我转到toolsdl.dll->Properties,则有一个名为Action的属性。我可以将其设置为Embedded Resource吗?应该有“如果更新则复制”或“始终复制”选项,请使用这些选项。