在代码后端中,.NET/C#字符串引用未加载更新的值

4

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

简而言之,我替换了一个包含许多页面标题(类似于HTML页面标题)的DLL文件(App_Code.dll),但是当从其他DLL中引用时,这些值并没有被更新。

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

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

Constants 类被编译到 App_Code.dll 中,我已经替换了它。我还清除了缓存(在这种情况下是 IIS 6),重新启动了机器,并确保我的本地浏览器缓存为空。然而,当我加载网页时,它没有加载 Constants.Titles.CardInfoPageDescription 的新值。这对于所有网页都是如此。唯一的方法是替换那个页面的 DLL,但该页面根本没有更改...你知道为什么吗?这个字符串引用实际上没有在运行时查找并构建到页面的 DLL 中吗?非常感谢您的帮助!谢谢,Adam
2个回答

5
让我猜猜:你的常量被公开为public const字段。
每当使用const时,它的值都会在编译时嵌入到已编译代码中,而不是在运行时动态引用。因此,当您随后替换包含常量声明的DLL时,所有在替换的DLL之外的代码将继续使用旧值,直到重新编译为止。
从更哲学的角度来看——为什么要更新您的“常量”?只有对永远不会改变的值使用const。如果可以更改,则不是常量。
从更实际的角度来看——公开公共字段通常不被认为是良好的做法。改用属性。(这个规则可能有一个例外,那就是永远不会改变的真正常量。)

1
常量被编译到每个使用它的dll中,而不是被引用。 - Matthew Steeples
作为一种信息提供,这些页面标题我们曾经认为永远不会改变,但出于SEO目的,我们决定进行一次布局刷新。现在我们已经知道了这一点,所以我们已经放弃使用常量了...非常感谢! - AdamW
这个值可能本意是一个常量,但在开发过程中,业务分析师可能会更改对该值的需求,因此该值会在此时意外更改。尽管如此,了解这一点对未来非常有用,因为我也认为引用的常量保持不变。 - Joel Etherton
@Joel:这就是为什么我说你应该只对永远不会改变的值使用“const”:如“CentimetresPerMetre”、“AbsoluteZeroInCelsius”、“PiTruncatedToFiveDecimalPlaces”等都是真正的常量;而“SomeValueThatTheSpecPromisedWouldNeverChange”则不是。 - LukeH

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接