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

12

我正在使用一个第三方API,它在两个DLL文件中定义。 我已经将这些DLL文件包含在我的项目中并设置了引用。到目前为止一切都还好。

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

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

澄清 我尝试将缺失的DLL添加到引用中,但它未被识别为.NET组件。 绝望之下,我直接将其添加到输出文件夹中,但仍然没有成功。

最后,我在计算机上安装了API,一切都正常工作。 安装设置了PATH变量,并在安装文件夹中找到了DLL文件。 但是如何告诉项目查找其中一个内部文件夹中的DLL?


当你说“将缺失的DLL复制到项目中”时,你是指添加了引用还是只是复制了文件?最好还是添加引用。 - Jon Skeet
3个回答

2
听起来你需要更好地了解第三方库以及它如何使用自己的依赖项。如果API的安装解决了问题,但手动复制文件却没有解决,那么你缺少了某些东西。可能是缺少文件,或者需要一些环境变量或注册表条目。两个工具可以帮助你解决这个问题:depends工具(它是C++安装的一部分)和procmon,后者将告诉你运行时使用的所有注册表键和文件。
如果你很幸运,只是缺少一个文件。如果是这样,你可以使用项目的“构建事件”部分,在成功构建后将所需的文件复制到正确的位置。如果不是,你将不得不通过要求安装API或自己编写安装项目来解决此问题。

0
你是如何部署的?只是普通的文件吗?如果是这样,只要该文件最终出现在项目输出目录中,它就应该可以工作。它已经成功了吗?
如果你正在使用其他的部署方式,你需要告诉引擎将其包含进去。对于每种方式(如msi/ClickOnce等),操作不同。

0
您可以逐步将下游依赖项作为引用添加到您的项目中。这很麻烦,有点脆弱。
或者您可以使用 Microsoft 的“Depends.exe”等工具检查您的顶层程序集并获取依赖项的引用列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接