相同的F#.NET解决方案可以在32位操作系统下的FSI中工作,但不能在64位操作系统上工作



我有一个F#.NET解决方案,在VS 2013中有一个项目,其中包含一些托管C#.NET和非托管C++DLL引用。

此解决方案在32位Windows 7 Enterprise下的FSI中完美运行。然而,如果我将解决方案中的所有复制到具有64位Windows 8.1操作系统的计算机上,保持引用DLL、文件等的所有相对和绝对路径相同,FSI会给我

System.DllNotFoundException: Unable to load DLL 'dllName': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

名为dllName的非托管C++DLL的错误,该DLL是解决方案的一部分,已被复制、存在并被引用。

dllName在\x64和\x86文件夹下有32位和64位版本。它们都被引用、复制并存在。32位操作系统和64位操作系统上的项目属性相同。我还在64位操作系统下尝试了属性->调试的配置和平台设置以及属性->构建的配置、平台和平台目标设置的所有可能组合,但都没有成功。

我想不知何故,FSI,在64位操作系统中的任务管理器->进程中显示为Fsi.exe (32-bit),而在32位操作系统的Fsi.exe,是在64位环境中弄乱我的32位应用程序的罪魁祸首,而我没有接触解决方案的任何部分。

我认识的聚会迟到了,但为了未来的搜索者:

当我的F#应用程序从共享动态加载混合模式的C++/CLI dll(具有非托管dll依赖项)时,我遇到了这个问题。

它在非交互式中运行良好,但在交互式中加载DLL失败。

对我来说,问题是卷影复制,它不适用于DLL的非托管依赖项。

解决方案是关闭F#交互式卷影复制。设置在Tools->Options->F# tools->Shadow copy assemblies下。如果我将其设置为false,则一切正常。

相关内容

  • 没有找到相关文章

最新更新