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

Visual studio 2013 在F#解决方案中找不到互操作程序集,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#gurus都知道为什么吗?“Microsoft.Office.Interop.Excel.dll”是文件的名称(由于.dll后

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

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

我猜在第一个示例中找不到它,因为您没有提供dll的路径。第二种情况可能成功,因为程序集已在gac中注册。