繁体   English   中英

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

[英]Interop assembly not found in F# solution

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM