Ссылка на строку .NET / C # в коде, не загружающем обновленное значение - PullRequest
4 голосов
/ 19 августа 2010

Кажется, я столкнулся со странной проблемой, из-за которой ссылка на строку не загружает обновленное значение.

Короче говоря, я заменил файл DLL (App_Code.dll), который содержит кучу страницзаголовки (например, заголовки HTML-страниц), но значения не обновляются при обращении из других библиотек DLL.

Вот фрагмент кода из кода позади образца страницы:

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

Класс констант скомпилирован в App_Code.dll, который я только что заменил.Я также очистил кэш (в данном случае IIS 6), перезагрузил компьютер и убедился, что кэш локального браузера пуст.

Однако, когда я загружаю веб-страницу, она не загружает новуюзначение для Constants.Titles.CardInfoPageDescription.Это верно для ВСЕХ веб-страниц.

Единственный способ заставить его обновить его, чтобы заменить DLL для этой страницы, которая не изменилась вообще ...

Любая идеяпочему это?Разве эта строковая ссылка на самом деле не просматривается во время выполнения и встроена в библиотеку DLL страницы?

Любая помощь приветствуется!

Спасибо, Адам

Ответы [ 2 ]

5 голосов
/ 19 августа 2010

Позвольте мне угадать: ваши константы отображаются как public const поля.

Всякий раз, когда вы используете const, его значение внедряется в скомпилированный код во время сборки, а не на динамическую ссылку во время выполнения. Поэтому при последующей замене библиотеки DLL, в которой объявлены константы, весь код вне замененной библиотеки DLL будет продолжать использовать старое значение до тех пор, пока оно не будет перекомпилировано.

На более философском замечании - почему обновляются ваши "константы"? Используйте const только для значений, которые никогда , никогда , никогда не изменяются. Если это может измениться, то это не константа.

И, на более практической ноте, обычно не рекомендуется использовать открытые поля. Используйте свойства вместо. (Одним из возможных исключений из этого правила могут быть подлинные константы, которые никогда и никогда не изменятся.)

1 голос
/ 19 августа 2010

Константы преобразуются во время компиляции в соответствующие значения и, следовательно, не изменяются во время выполнения. Ссылки на эти константы будут создаваться во время компиляции в этих ссылочных DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...