2008-10-27 127 views
11

我正在使用在2个DLL中定义的第三方API。我已经将这些DLL包含在我的项目中,并为它们设置了引用。到现在为止还挺好。C#:如何包含依赖的DLL?

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

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

澄清 我试着添加一个引用到缺少的DLL,但因为它没有被识别为.Net组件。无奈之下,我直接将其添加到输出文件夹,但没有成功。

最后,我在PC上安装了API,它都可以工作。安装设置PATH变量,并在安装文件夹中找到DLL。 但是如何告诉项目在其内部文件夹中查找?

+0

当你说你“将缺少的DLL复制到项目中” - 你的意思是你添加了一个对它的引用,或者只是复制文件?最好添加一个参考。 – 2008-10-27 13:35:29

回答

2

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

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

0

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

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

0

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

或者你可以使用像微软的“Depends.exe”这样的工具来检查你的顶级程序集并获得依赖关系的参考列表。