2016-01-05 71 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"大會。這解釋了爲什麼第二個例子成功。

相關問題