2013-01-15 32 views
3

如果共享程序集(在GAC中)具有靜態字段,並且字段值已更新,是否會反映在引用共享程序集的客戶端應用程序中? 或者客戶端應用程序是否需要重建?共享程序集中的靜態字段

回答

5

在.NET靜態庫中,每個編號爲AppDomain,因此即使程序集位於GAC中,其中聲明的任何靜態變量的作用域都只存在於引用的AppDomain中。 如果你正在靜態初始化爲一個靜態(獨立或不只讀),它將自動反映在使用它的所有程序集中,而不用重新編譯它們。

5

如果該字段表示爲const

public const int Foo = 100; 

,那麼你就需要重建所有的客戶端應用程序,因爲該值將被烤到這些客戶端。

如果它只是一個公共靜態只讀字段:

public static readonly int Foo = 100; 

...那麼你就不會需要重建客戶端。該值將在執行時從程序集中提取。 (當然,客戶端需要使用執行新的程序集,因此您需要考慮版本控制等)。

0

如果字段未標記爲常量,則不需要重新編譯客戶端每次訪問該字段時都會返回該值。

如果它被標記爲常量,那麼客戶端將需要重新編譯,因爲在編譯時該字段的值被「烘焙」。