2010-08-19 28 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中。