UPDATE: Предыдущая версия не работает на Azure, я упростил и исправил ниже. (Обратите внимание, что для работы в режиме разработки с помощью IIS Express вам потребуется установить URL Rewrite 2.0 из Microsoft http://www.iis.net/downloads/microsoft/url-rewrite - он использует установщик WebPi, обязательно закройте Visual Studio)
Если вы хотите изменить фактические имена файлов, а не добавление запроса (который игнорируется некоторыми прокси/браузерами для статических файлов). Вы можете выполнить следующие шаги: (Я знаю, что это старый пост, но я столкнулся с ним при разработке решения :
Как это сделать: автоматического приращения версии сборки каждый раз, когда проект построен, и использовать этот номер для маршрутизации статического файла на конкретном ре источники, которые вы хотели бы сохранить. (поэтому something.js включен как something.v1234.js с 1234 автоматически меняющимся каждый раз, когда проект построен). Я также добавил некоторые дополнительные функции, чтобы гарантировать, что файлы .min.js используются в производстве, а файлы regular.js используются при отладке (я использую WebGrease для автоматизации процесса minify). Одна хорошая вещь об этом решении заключается в том, что он работает в локальном/dev режиме, а также в производстве. (Я использую Visual Studio 2015/Net 4.6, но я считаю, что это будет работать в более ранних версиях, а
Шаг 1:. Включить автоматическое приращение на сборку при встраивании В файле AssemblyInfo.cs (найдено в разделе "свойства" вашего проекта измените следующие строки:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
в
[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
Шаг 2: Настройка URL REW обряд в web.config для файлов с внедренными версиями слизней (см шага 3)
В web.config (основнымы для проекта) добавить следующие правила в разделе <system.webServer>
я положил его непосредственно после </httpProtocol>
конечного тега.
<rewrite>
<rules>
<rule name="static-autoversion">
<match url="^(.*)([.]v[0-9]+)([.](js|css))$" />
<action type="Rewrite" url="{R:1}{R:3}" />
</rule>
<rule name="static-autoversion-min">
<match url="^(.*)([.]v[0-9]+)([.]min[.](js|css))$" />
<action type="Rewrite" url="{R:1}{R:3}" />
</rule>
</rules>
</rewrite>
Шаг 3: Переменные установки приложений для чтения текущей версии сборки и создания версии слизней в ваших JS и CSS файлов.
в Global.asax.cs (находится в корневом каталоге проекта) добавить следующий код в защищенный ничтожной Application_Start() (после строки регистра)
// setup application variables to write versions in razor (including .min extension when not debugging)
string addMin = ".min";
if (System.Diagnostics.Debugger.IsAttached) { addMin = ""; } // don't use minified files when executing locally
Application["JSVer"] = "v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.','0') + addMin + ".js";
Application["CSSVer"] = "v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.', '0') + addMin + ".css";
Шаг 4: Изменить ГКЗ ссылки в Бритва рассматривает использование переменных приложения, которые мы поставили в Global.asax.cs
@HttpContext.Current.Application["CSSVer"]
@HttpContext.Current.Application["JSVer"]
к примеру, в моем _Layout.cshtml, в моей голове разделе, у меня есть следующий блок кода для таблиц стилей:
<!-- Load all stylesheets -->
<link rel='stylesheet' href='https://fontastic.s3.amazonaws.com/8NNKTYdfdJLQS3D4kHqhLT/icons.css' />
<link rel='stylesheet' href='/Content/css/[email protected]["CSSVer"]' />
<link rel='stylesheet' media='(min-width: 700px)' href='/Content/css/[email protected]["CSSVer"]' />
<link rel='stylesheet' media='(min-width: 700px)' href='/Content/css/[email protected]["CSSVer"]' />
@RenderSection("PageCSS", required: false)
Пару вещей, чтобы заметить здесь: 1) не существует никакого расширения на файл. 2) также нет .min. Оба они обрабатываются с помощью кода в Global.asax.cs
Аналогично, (также в _Layout.cs) в моем яваскрипта разделе: У меня есть следующий код:
<script src="~/Scripts/all3bnd100.min.js" type="text/javascript"></script>
<script src="~/Scripts/[email protected]["JSVer"]" type="text/javascript"></script>
@RenderSection("scripts", required: false)
Первый файл является пакет всех моих сторонних библиотек, которые я создал вручную с помощью WebGrease. Если я добавляю или изменяю какие-либо файлы в комплекте (что редко), я вручную переименовываю файл в all3bnd101.min.js, all3bnd102.min.js и т. Д. Этот файл не соответствует обработчику перезаписи, поэтому будет храниться в кэше браузера клиента, пока вы вручную не переустановите/не измените имя.
Второй файл - ui.js (который будет записан как ui.v12345123.js или ui.v12345123.min.js в зависимости от того, запущен ли он в режиме отладки или нет). Это будет обработано/перезаписано. (Вы можете установить точку останова в Application_OnBeginRequest из Global.asax.cs, чтобы посмотреть его работы)
Полное обсуждение по этому вопросу на: Simplified Auto-Versioning of Javascript/CSS in ASP.NET MVC 5 to stop caching issues (works in Azure and Locally) With or Without URL Rewrite(в том числе способ сделать это без URL Rewrite)
Честно говоря, если вы связываете, то КАЖДЫЙ SINGLE-файл будет означать, как, 2-5 minified + bundled files. Я думаю, что это разумное решение. – Worthy7