在設計階段時解析組件
透過 [加入參考] 對話方塊的 [.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) 清單。 這可讓建置系統無法對錯誤版本的組件來解析型別。