C# 如何合并dll';将数据合并到一个dll中

C# 如何合并dll';将数据合并到一个dll中,c#,dll,C#,Dll,使用visual studio 2012中的c#,我创建了一个类库FileTube.dll 它使用其他3个dll。 我想制作一个包含这些内容的dll,这样我就可以通过nuget发布我的库。 我尝试了3种方法,但都失败了: 方法1:在vistual studio中,我将“嵌入互操作程序集”设置为true,出现以下错误: Error 2 Cannot embed interop types from assembly 'DiffieHellman.dll' because it is mis

使用visual studio 2012中的c#,我创建了一个类库FileTube.dll 它使用其他3个dll。 我想制作一个包含这些内容的dll,这样我就可以通过nuget发布我的库。 我尝试了3种方法,但都失败了:

方法1:在vistual studio中,我将“嵌入互操作程序集”设置为true,出现以下错误:

Error   2   Cannot embed interop types from assembly 'DiffieHellman.dll' because it is missing the 'GuidAttribute' attribute    DiffieHellman.dll
方法2:我使用了ILMergeGUI。它生成了用于ILMerge的代码,该代码失败并出现错误: 对象引用未设置为对象的实例。 命令如下:

"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
/ndebug
/copyattrs
/targetplatform:4.0,"C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
/out:"C:\temp\z.dll"
"C:\\FileTube\TestApp\bin\Debug\FileTube.dll"
"C:\\FileTube\TestApp\bin\Debug\DiffieHellman.dll"
"C:\\FileTube\TestApp\bin\Debug\Org.Mentalis.Security.dll"
"C:\\FileTube\TestApp\bin\Debug\Tamir.SharpSSH.dll"
方法3: 我跟着这个 使用反射包含dll程序集。不同之处在于,教程有一个主可执行文件,并且在可执行文件中包含dll,而我试图在dll中包含dll。因此,我将反射代码添加到主dll的类构造函数中。它可以编译,但如果我重新命名外部dll,它将失败,这意味着它并没有真正加载它


有什么想法吗?

您有几种选择:

  • 使用(免费)
    如何看和

  • 使用一些工具,如(商业)
    它可以嵌入和合并其他内容(无需更改源代码)

  • (免费但最少的源代码更改)
    将所有需要的依赖项标记为“嵌入式资源”-这样它们就包含在EXE文件中。。。您需要设置一个处理程序,该处理程序在运行时读取资源并将所需的DLL返回到.NET运行时

(答案抄自:)

想法是让一个nuget包引用另一个nuget包。让nuget解析引用,而不是试图智取它。您必须启动ILMerge命令。面包屑不够,但请注意,您正在这样做。为什么要将DLL合并到一个DLL中。只需将它们合并到可执行文件中。我认为ILMerge希望输出是exe,而不是DLL。另外,删除路径中的双反斜杠,这很挑剔,并且不能很好地处理异常。例如,如果您为当前版本的ILMerge提供了包含空格的路径,则它将抛出相同的错误。(顺便说一句,我在我的可执行文件中合并了非常相同的tamir.sharpSS.dll,ILMerge工作得非常完美。但是我将它合并到可执行文件(.exe)中不是另一个DLL。我的目标是创建一个DLL并与其他开发人员共享。这样,他们可以以本机方式使用它,但不能以本机方式在代码中使用可执行文件。第三个选项的可能副本仅适用于exe,而不适用于DLL。正确。感谢添加:)