当使用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);

当使用Assembly.LoadFrom()加载托管c++ dll时,接收文件未发现异常

可能是包装程序集(我假设在您的示例中路径指向)正确加载,但它引用的本机DLL未找到?您没有在代码中检查那个。通常错误消息显示"未找到程序集或其依赖项之一"

调查这个问题的一个好方法是使用SysInternals工具中的procmon来监视文件系统访问(它会告诉你系统在哪里寻找32位DLL)或使用Windows中的Fushion工具。

相关文章: