在F#解决方案中找不到Interop程序集

3

我是一个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#高手知道为什么吗?

5
我猜第一个情况没有成功找到dll文件是因为你没有提供它的路径。第二个情况可能成功是因为程序集已经在全局程序集缓存中注册了。 - Christian
1个回答

5
"Microsoft.Office.Interop.Excel.dll" 是一个文件的名称(因为有 ".dll" 后缀可以推断得出)。当您提供文件名时,#r 将在文件系统中查找该文件。由于您没有提供路径,它将在您当前的工作目录中查找。最可能的情况是 "Microsoft.Office.Interop.Excel.dll" 不在您的工作目录中。这就解释了为什么第一个示例失败了。
另一方面,"Microsoft.Office.Interop.Excel" 推断为一个程序集的名称(因为没有文件扩展名)。程序集是库,并通常以.dll文件的形式分发。但是,它们不必如此;例如,它们可以在运行时动态生成。此外,一个.dll文件在技术上可以包含多个程序集,尽管我从未在实际情况中见过这种情况。最常见的情况是一个.dll文件包含一个程序集,并且文件的名称对应于程序集的名称。
当您请求加载程序集时,.NET程序集加载器(称为Fusion)会开始查找所请求身份的程序集。它将从全局程序集缓存(Global Assembly Cache)中开始查找,我猜测它会在那里找到"Microsoft.Office.Interop.Excel"程序集。这解释了为什么第二个示例成功。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接