【发布时间】:2013-01-15 13:42:51
【问题描述】:
如果一个共享程序集(在 GAC 中)有一个静态字段,并且该字段的值已更新,这是否会反映在引用该共享程序集的客户端应用程序中? 还是客户端应用程序需要重建?
【问题讨论】:
如果一个共享程序集(在 GAC 中)有一个静态字段,并且该字段的值已更新,这是否会反映在引用该共享程序集的客户端应用程序中? 还是客户端应用程序需要重建?
【问题讨论】:
如果字段表示为const:
public const int Foo = 100;
那么您将需要重新构建所有客户端应用程序,因为值将被纳入这些客户端。
如果它只是一个公共静态只读字段:
public static readonly int Foo = 100;
...那么您将不需要重建客户端。该值将在执行时从程序集中获取。 (当然,客户端需要使用新的程序集来执行,所以你需要考虑版本控制等)
【讨论】:
在 .NET 中,静态是每个 AppDomain,所以即使程序集在 GAC 中,在其中声明的任何静态变量的范围都只存在于引用的 AppDomain 中。
如果您将静态初始化为文字(无论是否为只读),它将自动反映在所有使用它的程序集中,而无需重新编译它们。
【讨论】:
如果该字段未标记为常量,则不需要重新编译客户端,因为每次访问该字段时都会返回该值。
如果它被标记为常量,那么客户端将需要重新编译,因为该字段的值在编译时是“烘焙”的。
【讨论】: