Sharing assemblies、GAC
三種分享程式集(Assemblies)的方式
1.Class Libraries
只能被用在.NET languages上,且不包含metadata file,意旨不能被用在其他languages 或者 其他平台上。
2.Portable Class Libraries
可共用在不同的指定平台上,例如 Windows 7, Windows 8, Windows Phone, Silverlight甚至 Xbox 360。
3.Windows Component Libraries
只能輸出WinRT types,意旨包含metadata file(.WINMD),可使用在不同的語言,例如C++,C# 甚至 javascript。
因為WCL只能輸出WinRT type,所以實作上會有很多限制
-
對外不能有泛型
-
多型無法使用
-
class必須是sealed
-
公開方法必須是 - members, properties, methods,events
Global Assembly Cache (全域組件快取)
所謂的GAC,就是全域組件快取(Global Assembly Cache)。被放入GAC的程式集,無論在何處被其他程式集引用,都可以證自己能夠被CLR找到並且載入。 如果主機使用的是Windows作業系統,那麼GAC會被安裝在 C:\windows\assembly。
只有帶有公鑰的強式簽章程式集才能被部署到GAC去,.NET會檢查程式集的CLR標頭和加密值,保證程式集未被篡改。把程式集放入GAC中可以透過手動地部署,也可以透過工具部署。
GAC具有以下優點
-
程式集被多處引用時,可有效減少記憶體成本
-
可以有效發布程式集的最新版本
-
同一程式集的多個版本可以共存,並且可以透過設定進行切換
這邊要強調除非需要學習GAC目錄結構,否則在任何時候都不應該手動去修改GAC目錄,任何對GAC目錄的操作都應該透過工具實現。
參考:
https://msdn.microsoft.com/en-us/library/br205768(v=vs.85).aspx
http://stackoverflow.com/questions/28746609/portable-class-library-vs-library-project
https://msdn.microsoft.com/en-us/library/windows/apps/jj714080(v=vs.105).aspx#seeAlsoToggle
https://msdn.microsoft.com/en-us/library/windows/apps/jj714086.aspx#BKMK_WhatisaPortableClassLibrary
一天一分享,身體好健康。
該追究的不是過去的原因,而是現在的目的。