Передача метки времени сборки в код - PullRequest
1 голос
/ 15 декабря 2009

Я хотел бы дать моим CSS и javascript-файлам заголовки на будущее и добавить токен в URL-адреса, ссылающиеся на них. Таким образом, браузеры не должны повторно загружать CSS и javascript, если я не выпустил новую сборку сайта.

http://example.com/css/styles.css?build=23424

Как я могу передать номер сборки или временную метку моему коду, чтобы он мог добавить временную метку?

Очевидно, что в C # нет макросов, что я и использовал бы в C / C ++.

Я понимаю, что это заставит браузеры загружать ресурсы всякий раз, когда я делаю новую сборку - независимо от того, включала ли сборка изменение активов. Тем не менее, я хотел бы применить простую схему, прежде чем реализовывать что-то более продвинутое, например, просмотр времени изменения отдельных файлов.

Ответы [ 3 ]

2 голосов
/ 15 декабря 2009

Интересная идея.

Вот один из способов сделать это:

  1. Перейдите в ваш класс AssemblyInfo.cs в папке Properties вашего проекта.
  2. Измените версию сборки, добавив подстановочный знак «звезда»: [assembly: AssemblyVersion ("1.0. *")].
  3. В своем коде вы можете получить текущую версию сборки следующим образом:

_

var buildNumber = Assembly.GetExecutingAssembly().GetName().Version.Build;

_

Вот и все, все готово.

Изменение AssemblyVersion на 1.0. * Заставит Visual Studio / MSBuild автоматически увеличивать номер сборки для каждой сборки. Затем вы можете получить доступ к этому номеру сборки во время выполнения, используя приведенный выше фрагмент кода. Легко, как сыр.

2 голосов
/ 15 декабря 2009

Вот немного кода, который я использую для извлечения идентификатора сборки из текущей сборки при запуске приложения. Он считывает номер версии из сборки, обозначение версии (dev / qa / blank) из веб-конфигурации, а затем создает строку номера версии для добавления в приложение. Этот код идет в Global.asax.cs. Затем вы можете обратиться к нему в своей разметке из экземпляра приложения.

var webAssembly = Assembly.GetAssembly( typeof(...known class...) );
var designator =  WebConfigurationManager.AppSettings["VersionDesignator"];
string version = webAssembly.GetName().Version + designator;
this.Application.Add( "Version",  version );

Вот пример того, как вы могли бы использовать его в контексте MVC (извините, у меня нет примеров WebForms).

<link type="text/css" rel="stylesheet"
      href="/Content/styles/screen.css?build=<%= this.Application["Version"] %>" />
0 голосов
/ 15 декабря 2009

Браузеры и серверы знают, как обрабатывать кэширование через HTTP. Итак, я неправильно понимаю, что вы пытаетесь достичь с помощью такого рода кэширования. Браузер не будет повторно загружать ваш CSS и Javascript, если он видел это недавно. И он будет перезагружен, если вы сделаете новую сборку на сервере. Смотрите заголовки кеша, такие как Cache-control, Expires и т. Д. Вот учебник http://www.mnot.net/cache_docs/

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