1

我有一个 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)

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

dllName在 \x64 和 \x86 文件夹下有 32 位和 64 位版本。它们都被引用,被复制并且在那里。项目属性在 32 位操作系统和 64 位操作系统上是相同的。我还尝试了 Properties -> Debug 的 Configuration 和 Platform settings 的所有可能组合,以及 Properties -> Build 在 64 位 OS 下的 Configuration、Platform 和 Platform target 设置,但无济于事。

我想以某种方式出现Fsi.exe (32-bit)在任务管理器中的 FSI -> 64 位操作系统中的进程,但Fsi.exe在 32 位操作系统中,是在我没有触及任何东西的情况下在 64 位环境中搞乱我的 32 位应用程序的罪魁祸首解决方案的一部分。

4

1 回答 1

1

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

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

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

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

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

于 2017-02-20T09:27:56.750 回答