相同的F#.NET解决方案适用于32位操作系统下的FSI,但不适用于64位操作系统

时间:2014-11-01 08:52:02

标签: .net f# 32bit-64bit unmanaged fsi

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

此解决方案在32位Windows 7企业版的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的

错误被复制,是否被引用。

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

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

1 个答案:

答案 0 :(得分:0)

我认识的派对迟到了,但为了未来的搜索者的利益:

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

它在非交互式中运行良好,但无法以交互方式加载DLL。

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

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