C#:如何包含依赖的 DLL?

Posted

技术标签:

【中文标题】C#:如何包含依赖的 DLL?【英文标题】:C#: How to include dependent DLLs? 【发布时间】:2010-09-19 09:16:41 【问题描述】:

我正在使用在 2 个 DLL 中定义的第 3 方 API。我已经在我的项目中包含了这些 DLL 并设置了对它们的引用。到目前为止,一切都很好。

但是,这些 DLL 至少有一个在运行时无法找到的依赖 DLL。我将丢失的 DLL 复制到项目中并设置了“复制到输出”标志,但没有成功。

我应该在这里做什么来告诉项目它应该在哪里找到依赖的 DLL?

澄清 我尝试添加对丢失 DLL 的引用,但由于它未被识别为 .Net 组件。无奈之下,我直接将其添加到输出文件夹中,但没有成功。

最后,我在 PC 上安装了 API,一切正常。安装会设置 PATH 变量,并且 DLL 位于安装文件夹中。 但是如何告诉项目查看其内部文件夹之一?

【问题讨论】:

当您说“将丢失的 DLL 复制到项目中”时,您的意思是添加了对它的引用,还是只是复制了文件?最好添加参考。 【参考方案1】:

听起来您需要更好地了解第三方库以及它如何使用自己的依赖项。如果 API 的安装解决了问题,但手动复制文件没有解决,那么你就错过了一些东西。缺少文件,或者需要一些环境变量或注册表项。在这方面真正对您有帮助的两件事是依赖工具(它是 C++ 安装的一部分)和 procmon,它将告诉您在运行时使用的所有注册表项和文件。

如果你幸运的话,它只是你丢失的一个文件。如果仅此而已,您可以使用项目的“构建事件”部分将所需文件复制到成功构建的正确位置。如果没有,您将不得不通过其他方式解决这个问题 - 要么要求安装 API,要么滚动您自己的安装项目。

【讨论】:

【参考方案2】:

你是如何部署的?只是平面文件?如果是这样,只要文件在项目输出目录中结束,它就应该可以工作。是吗?

如果您正在使用其他部署,则需要告诉该引擎将其包含在内。这对于每个 msi/ClickOnce/etc 都是不同的。

【讨论】:

【参考方案3】:

您可以慢慢添加下游依赖项作为对您项目的引用。这很麻烦,而且有些脆弱

或者您可以使用微软的“Depends.exe”之类的工具来检查您的***程序集并获取依赖项的参考列表。

【讨论】:

以上是关于C#:如何包含依赖的 DLL?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 如何导入用 C# 制作的 DLL?

C# .dll 程序集可以包含入口点吗?

msbuild 包中不包含 C# 孙项目 DLL

c#如何将一个类库打包成两个dll

C# DLL如何保护防止被破解

如何确保 C# 项目中配置文件的更改导致 DLL 被重建?