【问题标题】:static fields in a shared assembly共享程序集中的静态字段
【发布时间】:2013-01-15 13:42:51
【问题描述】:

如果一个共享程序集(在 GAC 中)有一个静态字段,并且该字段的值已更新,这是否会反映在引用该共享程序集的客户端应用程序中? 还是客户端应用程序需要重建?

【问题讨论】:

    标签: c# gac


    【解决方案1】:

    如果字段表示为const

    public const int Foo = 100;
    

    那么您将需要重新构建所有客户端应用程序,因为值将被纳入这些客户端。

    如果它只是一个公共静态只读字段:

    public static readonly int Foo = 100;
    

    ...那么您将不需要重建客户端。该值将在执行时从程序集中获取。 (当然,客户端需要使用新的程序集来执行,所以你需要考虑版本控制等)

    【讨论】:

    • 最佳答案! (Y)
    【解决方案2】:

    在 .NET 中,静态是每个 AppDomain,所以即使程序集在 GAC 中,在其中声明的任何静态变量的范围都只存在于引用的 AppDomain 中。 如果您将静态初始化为文字(无论是否为只读),它将自动反映在所有使用它的程序集中,而无需重新编译它们。

    【讨论】:

      【解决方案3】:

      如果该字段未标记为常量,则不需要重新编译客户端,因为每次访问该字段时都会返回该值。

      如果它被标记为常量,那么客户端将需要重新编译,因为该字段的值在编译时是“烘焙”的。

      【讨论】:

        猜你喜欢
        • 2012-06-21
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        相关资源
        最近更新 更多