我使用托管C ++创建了一个dll。现在我正试图从C#中使用它。我已将Object添加到项目引用中。对象浏览器在dll中正确显示对象,对象浏览器中dll的路径对应实际路径。
然而,当我运行C#程序时,它会抱怨:
未处理的异常:System.IO.FileNotFoundException:指定的模块可以 找不到。 (HRESULT异常:0x8007007E)
知道还有什么必须做的吗?
感谢。
答案 0 :(得分:6)
我认为您缺少托管C ++程序集的其他程序集或dll的引用。
答案 1 :(得分:0)
您的托管C ++程序集是否具有其他依赖项,包括非托管dll?如果引用的程序集无法加载依赖项,您将在运行时看到此错误。
答案 2 :(得分:0)
您是否在没有安装VS的计算机上运行应用程序?
我只是问,因为我在这里遇到了类似的问题:Mixed Mode Library and CRT Dependencies - HELP
如果你向下滚动到我的答案,你可以看到我做了什么帮助了我。
答案 3 :(得分:0)
检查c ++程序集与c#程序位于同一文件夹中。如果'Copy Local'属性设置为true(在c#app中对c ++ dll的引用),则应自动复制它。
如果有c ++ dll,最可能的问题是c ++ dll依赖于另一个无法找到的非托管dll(即c#不会将这些dll复制到你的app文件夹,因为它不知道非托管引用) 。您可以在c ++ dll上使用DependencyWalker来检查缺少的依赖项。
另一个可能的问题可能是您的MSVC运行时dll存在问题。看看DependencyWalker是否抱怨缺少MSVCR * .dll,MSVCP * .dll等文件。