如何创建包含所有其他内容的 dll?
How to create a dll that includes all the others?
在创建“[=26=的库]”类型的项目时,通常编译时可以生成一个dll,但是如何在不丢失已经包含的其他dll的情况下生成一个dll?
我用一个例子来解释:事实证明,Nuget 下载了一个 S22.Imap dll 和我一起工作的那个,后来我用我在一开始解释的传统方式生成了 dll,但是当我想在另一台计算机上使用 dll,我得到的错误不是我发现包含 S22.IMAP dll 的函数。所以为了解决这个问题,我不得不将我项目的dll,S22.IMAP以一种额外的方式复制到另一台计算机的特定路径中。
我的问题是:
您如何生成包含您正在使用的项目中包含的 dll?
一般来说,你不会。 DLL 是一个 动态 链接库,您通常只会在构建期间组合静态库。这是一个 answer on the difference between static and dynamic linking.
通常,您会在安装程序包中包含所需的所有 DLL。如果您使用 Visual Studio 创建安装程序,它可以为您检测依赖项。当您 运行 安装程序时,将部署所有必需的 DLL。几乎所有商业 .NET 软件都遵循这种模式。
可以 使用名为 ILMerge 的工具将一个程序集合并到另一个程序集中。这将是一件 非常 不寻常的事情,并且可能会导致智能 属性 和代码签名方面的问题,因此不推荐.
当您构建项目时,所有引用的第 3 方 dll(在您的示例中为 S22.Imap.dll)将与您自己的 dll 文件(假设为 a.dll)一起复制到输出文件夹。这意味着您应该始终将它们一起复制 (S22 + a.dll) 到您想要引用它们的地方,在另一个 computer/folder/place.
上
如果你真的想让他们只做一个文件(虽然不推荐),你可以将S22设置为一些"nested resource"。那么你只会得到一个 a.dll 文件,而 S22 文件在 a.dll 中。请参阅以下页面以获取一些参考:
Embedding one dll inside another as an embedded resource and then calling it from my code
并且,ILMerge 是可以帮助您做到这一点的工具。
在创建“[=26=的库]”类型的项目时,通常编译时可以生成一个dll,但是如何在不丢失已经包含的其他dll的情况下生成一个dll?
我用一个例子来解释:事实证明,Nuget 下载了一个 S22.Imap dll 和我一起工作的那个,后来我用我在一开始解释的传统方式生成了 dll,但是当我想在另一台计算机上使用 dll,我得到的错误不是我发现包含 S22.IMAP dll 的函数。所以为了解决这个问题,我不得不将我项目的dll,S22.IMAP以一种额外的方式复制到另一台计算机的特定路径中。
我的问题是:
您如何生成包含您正在使用的项目中包含的 dll?
一般来说,你不会。 DLL 是一个 动态 链接库,您通常只会在构建期间组合静态库。这是一个 answer on the difference between static and dynamic linking.
通常,您会在安装程序包中包含所需的所有 DLL。如果您使用 Visual Studio 创建安装程序,它可以为您检测依赖项。当您 运行 安装程序时,将部署所有必需的 DLL。几乎所有商业 .NET 软件都遵循这种模式。
可以 使用名为 ILMerge 的工具将一个程序集合并到另一个程序集中。这将是一件 非常 不寻常的事情,并且可能会导致智能 属性 和代码签名方面的问题,因此不推荐.
当您构建项目时,所有引用的第 3 方 dll(在您的示例中为 S22.Imap.dll)将与您自己的 dll 文件(假设为 a.dll)一起复制到输出文件夹。这意味着您应该始终将它们一起复制 (S22 + a.dll) 到您想要引用它们的地方,在另一个 computer/folder/place.
上如果你真的想让他们只做一个文件(虽然不推荐),你可以将S22设置为一些"nested resource"。那么你只会得到一个 a.dll 文件,而 S22 文件在 a.dll 中。请参阅以下页面以获取一些参考:
Embedding one dll inside another as an embedded resource and then calling it from my code
并且,ILMerge 是可以帮助您做到这一点的工具。