这里的 F# 新手,花了很多痛苦的时间试图用 MSDN F# 教程中的一段简单代码来解决错误。
#r "Microsoft.Office.Interop.Excel.dll"
// fails with invalid/not found errors
#r "Microsoft.Office.Interop.Excel" // works like a charm.
任何 F# 大师都知道为什么?
最佳答案
"Microsoft.Office.Interop.Excel.dll"
是一个文件的名字(推断,因为有.dll
后缀).当您提供文件名时,#r
将在文件系统中查找该文件。由于您没有提供路径,它将在您当前的工作目录中查找。 "Microsoft.Office.Interop.Excel.dll"
很可能不在您的工作目录中。这解释了第一个示例失败的原因。
“Microsoft.Office.Interop.Excel”
被推断为程序集 的名称(因为没有文件扩展名)。程序集是库,通常分布在 .dll
文件中。不过,他们不必这样做;例如,它们可以在运行时动态发出。此外,一个 .dll
文件在技术上可以包含多个程序集,尽管我从未在野外看到过这种情况。最正常的情况是 .dll
文件包含单个程序集,并且文件的名称对应于程序集的名称。
当您请求加载程序集时,.NET 程序集加载程序(称为 Fusion)启动 looking for an assembly with the requested identity .它将开始在 Global Assembly Cache 中查找,我的猜测是它在那里找到了 "Microsoft.Office.Interop.Excel"
程序集。这解释了第二个示例成功的原因。
关于visual-studio-2013 - 在 F# 解决方案中找不到互操作程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621033/