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#大师知道为什么?
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#大师知道为什么?
"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"
大会。这解释了为什么第二个例子成功。
我猜测它没有在第一种情况下找到,因为你没有提供一个路径到DLL。第二种情况可能成功,因为程序集已在gac中注册。 – Christian