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

标签 visual-studio-2013 f#

这里的 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# 大师都知道为什么?

最佳答案

"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" 程序集。这解释了第二个示例成功的原因。

关于visual-studio-2013 - 在 F# 解决方案中找不到互操作程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621033/

相关文章:

c# - 在 app.config 中扩展键值对功能

c# - 模块窗口中的 dll 符号状态显示 "Skipped Loading"?

f# - 关联性、优先级和 F# Pipe-forward

multithreading - 如何并行化对称worker?

azure - VS2013 azure模拟器worker运行调试

powershell - 如何获取 TFS 本地工作区中的项目计数?

f# - 我可以选择性地打开一个模块,以便我可以不加限定地引用它的一些值吗?

f# - F#语法错误

c# - 如何在保持其语法的同时使此函数式代码的性能更高

c++ - GoogleTest 仅在定义在 .h 文件中时有效