我有一个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位应用程序的罪魁祸首,而我没有触及解决方案的任何部分。
答案 0 :(得分:0)
我认识的派对迟到了,但为了未来的搜索者的利益:
当我的F#应用程序动态加载来自共享的混合模式C ++ / CLI dll(具有非托管DLL依赖项)时,我遇到了这个问题。
它在非交互式中运行良好,但无法以交互方式加载DLL。
我遇到的问题是卷影复制,它不适用于DLL的非托管依赖项。
解决方案是关闭F#交互式影子复制。该设置位于Tools->Options->F# tools->Shadow copy assemblies
下。如果我将其设置为false
,一切正常。