2016-01-05 35 views
3

F#新手在这里花了许多痛苦的时间尝试使用MSDN F#教程中的一段简单代码来解决错误。在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。第二种情况可能成功,因为程序集已在gac中注册。 – Christian

回答

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

相关问题