在設計階段時解析組件
透過 [加入參考] 對話方塊的 [.NET] 索引標籤加入組件的參考,就會參考全域組件快取 (GAC) 中的組件,這是一種常見的錯誤觀念。事實並不是這樣。實際上是參考一個中繼參考組件,也就是說,這個組件會包含所有型別和簽章資訊,但不一定會包含任何程式碼。[.NET] 索引標籤會列出對應至 .NET Framework 中之執行階段組件的參考組件。此外,它還會列出對應至已註冊的 AssemblyFoldersEx 資料夾 (由協力廠商使用) 中之執行階段組件的參考組件。
多目標
Visual Studio 2012 可讓您以在 Common Language Runtime (CLR) 2.0 版或第 4 版上執行的 .NET Framework 版本為目標。這包括 .NET Framework 2.0, 3.0, 3.5, 4、4.5 和 Silverlight 1.0 版, 2.0 和 3.0。如果有以 CLR 2.0 版或第 4 版為基礎的新版 .NET Framework 發行,則可使用目標套件安裝該 Framework,該 Framework 會自動顯示在 Visual Studio 中做為目標。
型別解析如何運作
在執行階段,CLR 會查看 GAC、bin 目錄和任何探查路徑,來解析組件中的型別。這是由融合載入器處理。但是,融合載入器如何知道它要尋找什麼?這視建置應用程式時在設計階段進行的解析而定。
在建置期間,編譯器會使用參考組件來解析應用程式型別。在 .NET Framework 版本,並安裝 .NET Framework 時, 2.0, 3.0, 3.5, 4 和 4.5,參考組件安裝。
在 .NET Framework 4.5 版中,參考組件是由目標套件提供,該目標套件隨附於對應的 .NET Framework SDK 版本中。Framework 本身只提供執行階段組件。若要建置應用程式,您需要同時安裝 .NET Framework 和對應的 .NET Framework SDK。
當您以特定 .NET Framework 為目標時,建置系統會使用目標套件中的參考組件來解析所有型別。在執行階段,融合載入器會將這些相同的型別解析為執行階段組件 (通常位於 GAC 中)。
如果參考組件無法使用,則建置系統會使用執行階段組件來解析組件型別。因為 GAC 中的執行階段組件不以次要版本編號區別,所以可能會對錯誤組件進行解析。例如,如果以 3.0 版為目標時參考 .NET Framework 3.5 版所引入的新方法,就可能會發生這種狀況。建置會成功,且應用程式會在組建電腦上執行,但如果部署的電腦上沒有安裝 3.5 版,則應用程式會失敗。
現在隨附於 .NET Framework SDK 的目標套件,包含該版 Framework 所有執行階段組件的清單,稱為可轉散發 (redist) 清單。這可讓建置系統無法對錯誤版本的組件來解析型別。