我似乎遇到了一个奇怪的问题,即字符串引用没有加载更新的值。
简而言之,我已经替换了包含一堆页面标题的DLL文件(App_Code.dll)(想想HTML页面标题),但是当从其他DLL引用时,这些值没有被更新。
以下是示例页面代码隐藏的代码段:
this.Master.PageDescription = Constants.Titles.CardInfoPageDescription;
Constants类被编译成App_Code.dll,我刚刚替换它。我还清除了缓存(本例中为IIS 6),重新启动了计算机,并确保我的本地浏览器缓存为空。
但是,当我加载网页时,它没有加载Constants.Titles.CardInfoPageDescription的新值。所有网页都适用。
我可以让它更新它以替换该页面的DLL的唯一方法,该页面根本没有改变......
知道为什么会这样吗?这个字符串引用是否实际上没有在运行时查找并内置到页面DLL中?
非常感谢任何帮助!
谢谢, 亚当
答案 0 :(得分:5)
让我猜一下:您的常量会显示为public const
个字段。
每当使用const
时,其值都会在构建时嵌入到已编译的代码中,而不是在运行时动态引用。因此,当您随后替换声明常量的DLL时,替换的DLL之外的所有代码将继续使用旧值,直到重新编译它为止。
更哲学的说明 - 为什么你的“常数”会被更新?仅对{em>从不,永远,永远更改的值使用const
。如果它可以改变那么它不是一个常数。
更实际的说明 - 揭露公共领域通常不被视为良好做法。请改用属性。 (此规则的一个可能的例外可能是真正的常量,这些常量永远不会永远改变。)
答案 1 :(得分:1)
常量在编译时转换为各自的值,因此在运行时不会更改。这些常量的引用将在编译时在这些引用DLL中构建。