C#:如何包含依赖DLL?

我正在使用在2个DLL中定义的第三方API。 我已将这些DLL包含在我的项目中并设置对它们的引用。 到现在为止还挺好。

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

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

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

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

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

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

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

如果您正在使用其他部署,则需要告知该引擎包含它。 每个msi / ClickOnce / etc都有所不同。

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

或者您可以使用Microsoft软件中的“Depends.exe”等工具来检查顶级程序集并获取依赖项的引用列表。