在F#解决方案中找不到互操作程序集

时间:2016-01-05 20:52:26

标签: visual-studio-2013 f#

F#newbie here,花了很多时间尝试使用MSDN F#教程中的一段简单代码来解决错误。

#r "Microsoft.Office.Interop.Excel.dll" 
// fails with invalid/not found errors

#r "Microsoft.Office.Interop.Excel" // works like a charm.

任何F#大师都知道为什么?

1 个答案:

答案 0 :(得分:5)

"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"程序集。这解释了为什么第二个例子成功。