F#newbie在这里花了很多痛苦的时间尝试使用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)开始查找具有所请求标识的程序集.它将开始查看全局程序集缓存,我的猜测是它在"Microsoft.Office.Interop.Excel"
那里找到了程序集.这解释了为什么第二个例子成功了.