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