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#大师都知道为什么?
答案 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"
程序集。这解释了为什么第二个例子成功。