我有一個F#.NET解決方案,包含一些託管C#.NET和非託管C++ DLL引用。相同的F#.NET解決方案在32位操作系統下的FSI中工作,但不在64位操作系統下工作
該解決方案在FSI 32位Windows 7 Enterprise下完美運行。但是,如果我複製一切在解決計算機與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位操作系統上的項目屬性都相同。我還嘗試了所有可能的組合和平臺設置的屬性 - >調試以及配置,平臺和平臺目標設置的屬性 - >生成在64位操作系統下無濟於事。
我猜想FSI在32位操作系統中出現在任務管理器中的Fsi.exe (32-bit)
出現在64位操作系統中,但Fsi.exe
是32位操作系統中的32位應用程序的罪魁禍首,沒有我觸摸解決方案的任何部分。
你做了什麼來確保操作系統可以找到那個x86子目錄中的DLL是相當不清楚的。無論您是否也在部署DLL所需的依賴DLL,每個人都會忘記複製CRT依賴項。最簡單的診斷方法是運行SysInternals的Process Monitor。接近追蹤結束時,您會看到該程序正在搜索缺少的DLL並未找到它。 – 2014-11-01 12:31:32
@Hans Passant感謝您的建議。使用進程監視器進行檢查,似乎fsi.exe試圖在任何地方查找DLL(異常的地方,如C:\ Users \ Rebecca \ AppData \ Local \ assembly \ dl3 \ KYOX0B1Q.Z4R \ 76HH9QN1.6KW \ eadfc563 \ 00e04bbe_6b74cf01 \等。)除了它實際上。所以我將DLL複製到了它正在查找的文件夾中,現在它可以工作 - 我想這不是一個穩定的解決方案。但是,我仍然不明白我需要爲fsi.exe找到它實際上在64位操作系統下的DLL。爲什麼fsi.exe試圖在除了實際引用的地方之外的任何地方查找它? – bugfoot 2014-11-01 19:58:45
您是否嘗試在工具|選項| F#工具| 64位F#Interactive中將_64位F#Interactive_設置爲true?在64位系統上,重置FSI後,FSI進程將顯示爲FsiAnyCPU.exe,而不是您的示例中的Fsi.exe(32位)。 – 2014-11-02 13:42:07