2010-08-19 29 views
4

我似乎遇到了一个奇怪的问题,即字符串引用不加载更新的值。代码后面的.NET/C#字符串参考不加载更新值

总之,我已经替换了一个包含一堆页面标题(认为HTML页面标题)的DLL文件(App_Code.dll),但是从其他DLL引用时不会更新这些值。

下面是一个示例页面的代码隐藏的代码片段:

this.Master.PageDescription = Constants.Titles.CardInfoPageDescription; 

常量类编译成App_Code.dll,我刚刚更换。我也清除了缓存(本例中为IIS 6),重新启动了机器,并确保我的本地浏览器缓存为空。

但是,当我加载网页时,它不会加载Constants.Titles.CardInfoPageDescription的新值。所有网页都是如此。

的唯一途径,我可以得到它的更新替换该页面,这并没有改变所有的DLL ...

任何想法,这是为什么?这个字符串引用在运行时没有实际查找,并且内置在页面DLL中?

任何帮助非常感谢!

感谢, 亚当

回答

5

让我猜:你的常量公开为public const领域。

无论何时使用const,其值都会在构建时嵌入到编译代码中,而不是在运行时被动态引用。因此,当您随后替换声明常量的DLL时,被替换的DLL之外的所有代码将继续使用旧值直至重新编译。

在一个更哲学的笔记 - 为什么你的“常量”被更新?只使用const表示将会有从不,有史以来,有史以来变化。如果它可以改变,那么它不是一个常数。

而在更实际的说明 - 暴露公共领域通常不被认为是好的做法。改用属性。 (此规则的一个可能的例外可能是真正的常数永远不会改变。)

+1

常量被编译到每个使用它而不是引用的dll中。 – 2010-08-19 15:16:23

+0

令人惊叹!谢谢! – AdamW 2010-08-19 15:17:41

+0

作为一个供参考 - 这些是页面标题,我们认为永远不会改变,但我们决定对SEO目的进行一次布局刷新。绝对是我们已经离开使用常量现在我们知道这一点...非常感谢! – AdamW 2010-08-19 15:36:32

1

常量在编译时转换为各自的值,因此在运行系统时不会更改。这些常量的引用将在编译时建立在这些引用DLL中。