代码隐藏中的.NET / C#字符串引用未加载更新的值

时间:2010-08-19 15:13:10

标签: c# .net iis-6 string code-behind

我似乎遇到了一个奇怪的问题,即字符串引用没有加载更新的值。

简而言之,我已经替换了包含一堆页面标题的DLL文件(App_Code.dll)(想想HTML页面标题),但是当从其他DLL引用时,这些值没有被更新。

以下是示例页面代码隐藏的代码段:

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

Constants类被编译成App_Code.dll,我刚刚替换它。我还清除了缓存(本例中为IIS 6),重新启动了计算机,并确保我的本地浏览器缓存为空。

但是,当我加载网页时,它没有加载Constants.Titles.CardInfoPageDescription的新值。所有网页都适用。

我可以让它更新它以替换该页面的DLL的唯一方法,该页面根本没有改变......

知道为什么会这样吗?这个字符串引用是否实际上没有在运行时查找并内置到页面DLL中?

非常感谢任何帮助!

谢谢, 亚当

2 个答案:

答案 0 :(得分:5)

让我猜一下:您的常量会显示为public const个字段。

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

更哲学的说明 - 为什么你的“常数”会被更新?仅对{em>从不,永远永远更改的值使用const。如果它可以改变那么它不是一个常数。

更实际的说明 - 揭露公共领域通常不被视为良好做法。请改用属性。 (此规则的一个可能的例外可能是真正的常量,这些常量永远不会永远改变。)

答案 1 :(得分:1)

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