AjaxMin не работает на сайте Azure
Я использую AjaxMin от Microsoft для минимизации JavaScript на своем веб-сайте, который размещается на Azure. Я использую BuildTask для автоматической минимизации JavaScript во время выполнения. Эта задача сборки указана в файле.csproj.
Этот процесс работает в моей локальной среде, однако он не работает при развертывании на моем сайте Azure. Сайт Azure выдает сообщение об ошибке 404: файл не найден, когда я пытаюсь сослаться на уменьшенную версию файлов.js.
Можно ли использовать задачи сборки на сайте Azure? Есть что-то, что я пропускаю? Я постарался не включать файлы.min.js в систему контроля версий, как предлагает этот учебник ( http://www.asp.net/ajaxlibrary/AjaxMinQuickStart.ashx), но мне интересно, есть ли что-то конкретное для Azure, которое Мне нужно настроить.
Спасибо!
2 ответа
У меня это работает должным образом в моих проектах. Я расскажу вам, как я это сделал, хотя это может быть не самым простым или простым способом.
Прежде чем начать, полезно иметь возможность проверить, включены ли ваши минимизированные файлы в пакет развертывания Azure, без фактического развертывания. Это довольно легко сделать. .cspkg
Файл на самом деле является файлом в формате zip, так что вы можете открыть его любым архиватором zip. (Мне нравится использовать 7Zip для этого, потому что команда правой кнопкой мыши -> Открыть архив не требует, чтобы вы переименовали файл, но вы можете использовать Windows Explorer, WinRAR и т. Д.) .cspkg
вы увидите еще один большой файл с .cssx
расширение. Это тоже zip-файл. Внутри .cssx
вы найдете sitesroot
папка с подкаталогом для каждого сайта, который вы развертываете, который будет содержать все ваши фактические файлы сайта. Таким образом, вы можете покопаться и посмотреть, какие файлы развертываются в Azure.
Сначала попробуйте отредактировать файл проекта для вашего веб-проекта (тот, который содержит все файлы Javascript/CSS). Вы можете использовать Блокнот или в Visual Studio щелкните проект правой кнопкой мыши, выберите "Разгрузить проект", затем снова щелкните правой кнопкой мыши и выберите "Изменить". Внутри файла проекта вставьте следующий раздел:
<ItemGroup>
<!-- Copy over all the minified CSS & JS to the output directory-->
<Content Include="**\*.min.css" />
<Content Include="**\*.min.js" />
</ItemGroup>
Затем перезагрузите проект, перепакуйте его и посмотрите, включены ли ваши файлы в .cspkg
файл. Если они есть, то вы сделали.
Если нет, есть пара других вещей, чтобы проверить. Возможно, ваша минификация не работает на правильной стадии сборки. Моя цель минимизации выглядит так:
<Target Name="PrepWebApp" Condition="$(Configuration)=='Release'" AfterTargets="AfterBuild">
Если это все еще не работает, и ваша веб-роль содержит несколько сайтов и / или виртуальных приложений, возможно, что этапы упаковки выполняются не для всех сайтов. Поэтому, когда вы собираетесь упаковать свой проект для развертывания в Azure, он все еще может не выполнять шаг минификации (наряду с преобразованиями web.config и некоторыми другими вещами). Если это так, обратитесь к этому сообщению в блоге, чтобы узнать, как это исправить.
На всякий случай, если эта запись в блоге пропадет, я скопирую самую важную информацию здесь. Вы должны поместить это в файл.ccproj для своей веб-роли (с соответствующими битами, измененными в соответствии со структурой вашего проекта):
<PropertyGroup>
<!-- Inject the publication of "secondary" sites into the Windows Azure build/project packaging process. -->
<CoreBuildDependsOn>
CleanSecondarySites;
PublishSecondarySites;
$(CoreBuildDependsOn)
</CoreBuildDependsOn>
<!-- This is the directory within the web application project directory to which the project will be "published" for later packaging by the Azure project. -->
<SecondarySitePublishDir>azure.publish\</SecondarySitePublishDir>
</PropertyGroup>
<!-- These SecondarySite items represent the collection of sites (other than the web application associated with the role) that need special packaging. -->
<ItemGroup>
<SecondarySite Include="..\WebApplication1\WebApplication1.csproj" />
<SecondarySite Include="..\WebApplication2\WebApplication2.csproj" />
</ItemGroup>
<Target Name="CleanSecondarySites">
<RemoveDir Directories="%(SecondarySite.RootDir)%(Directory)$(SecondarySitePublishDir)" />
</Target>
<Target Name="PublishSecondarySites" Condition="'$(PackageForComputeEmulator)' == 'true'
Or '$(IsExecutingPublishTarget)' == 'true' ">
<!--
Execute the Build (and more importantly the _WPPCopyWebApplication) target to "publish" each secondary web application project.
Note the setting of the WebProjectOutputDir property; this is where the project will be published to be later picked up by CSPack.
-->
<MSBuild Projects="%(SecondarySite.Identity)" Targets="Build;_WPPCopyWebApplication" Properties="Configuration=$(Configuration);Platform=$(Platform);WebProjectOutputDir=$(SecondarySitePublishDir)" />
Задача сборки будет выполняться в Visual Studio при сборке проекта. Необходимо убедиться, что минимизированные файлы также развертываются в Azure.
Я предполагаю, что, возможно, потому, что элемент создается во время сборки, что он не является частью самого проекта, и это игнорируется на этапе развертывания.
Пожалуйста, убедитесь, что используемая система развертывания будет включать в себя все файлы сценариев, а не только те, которые находятся в самом проекте.