Sharing assemblies

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

https://worldwidecode.wordpress.com/2013/03/22/windows-8-store-apps-class-library-vs-windows-runtime-component/

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

 

 

一天一分享,身體好健康。

該追究的不是過去的原因,而是現在的目的。