当使用Assembly.LoadFrom()加载托管c++ dll时,接收文件未发现异常
本文关键字:dll 异常 未发现 文件 c++ Assembly LoadFrom 加载 | 更新日期: 2023-09-27 18:04:42
我正在为微软项目开发一个使用VSTO的加载项,我有一个托管的c++ dll,它包装了一个非托管的c++ dll。我需要部署两个版本的托管c++ dll一个为64位,一个为32位。我使用Assembly.LoadFrom(path)来加载适当的dll,这取决于我运行的Office的哪个版本。这一切似乎在我的开发机器上工作得很好,这是一台运行64位办公室的64位机器。下面是所讨论的代码:
try
{
//This will return true so I know the file exists
bool fileExists = File.Exists(path);
//This will throw a file not found exception
keyModAssembly = Assembly.LoadFrom(path);
}
catch (FileNotFoundException e)
{
}
我已经三次检查了路径和文件存在,并且是正确的32位dll。这在我的64位机器上工作得很好,但是当我试图在32位版本中测试它时,在xpmode中失败。
如有任何建议,不胜感激。
提前感谢。
编辑
响应Phillip的关于非托管dll可能没有被发现的建议,我正在使用LoadLibraryW(路径)将非托管dll加载到作用域。
// this is not throwing an exception so I know the unmanaged dll is there.
if (!File.Exists(unmanagedPath))
throw new FileNotFoundException();
LoadLibraryW(unmangedlibPath);
可能是包装程序集(我假设在您的示例中路径指向)正确加载,但它引用的本机DLL未找到?您没有在代码中检查那个。通常错误消息显示"未找到程序集或其依赖项之一"。
调查这个问题的一个好方法是使用SysInternals工具中的procmon来监视文件系统访问(它会告诉你系统在哪里寻找32位DLL)或使用Windows中的Fushion工具。