JS / CSS включает замену раздела, Debug vs Release - PullRequest
8 голосов
/ 22 мая 2009

Мне было бы интересно услышать, как люди обрабатывают условную разметку, в частности, на своих мастер-страницах между сборками выпуска и отладки.

Конкретный сценарий, к которому это применимо, обрабатывает сцепленные файлы js и css. В настоящее время я использую .Net-порт YUI-сжатия для создания отдельных site.css и site.js из большой коллекции отдельных файлов.

Одна мысль, которая пришла мне в голову, состояла в том, чтобы поместить раздел js и css include в пользовательский элемент управления или коллекцию панелей и условно отобразить разметку <link> и <script> на основе состояния отладки или выпуска сборки. Что-то вроде:

#if DEBUG
    pnlDebugIncludes.visible = true
#else
    pnlReleaseIncludes.visible = true       
#endif

Панель на самом деле не очень хороша семантически - упаковка <script> тегов в <div> немного грубая; должен быть лучший подход. Я также думаю, что элемент уровня блока, такой как <div> в <head>, будет недействительным html.

Другая идея состояла в том, что это можно было бы сделать, используя замены раздела web.config, но я не уверен, как бы я поступил так.

Ответы [ 3 ]

9 голосов
/ 22 мая 2009

Я только что попробовал это на моей главной странице в моем проекте ASP.NET MVC, и это сработало. Если в режиме отладки я использую версию разработки jQuery, а если не в режиме отладки, я использую уменьшенную версию jQuery:

<head runat="server">
<% #if DEBUG %>
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.js") %>"></script>
<% #else %>
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.min.js") %>"></script>
<% #endif %>
</head>
5 голосов
/ 22 мая 2009

Здесь неплохо обсуждается изменение настроек web.config:

Использование различных Web.config в среде разработки и производства

Примечание: вы задаете другой вопрос, но я все равно предлагаю взглянуть на него, потому что это потрясающая коллекция предложений о том, как переключаться между живыми и отладочными настройками, и все ответы (IMO) имеют определенную ценность - не только самый высокий / принятый ответ.

Лично , я использую метод, описанный здесь, и думаю, что он является наиболее гибким и применим ко всем типам изменений конфигурации, поскольку он основан на файлах, но позволяет автоматически заменять их в зависимости от конфигурации решения. :

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

По сути, вы запускаете событие перед сборкой, чтобы заменить веб-конфигурацию другим на диске с именем конфигурации решения, добавленным к имени файла. Например, у меня есть web.config.release, web.config.debug и даже web.config.neilathome.

Затем я использую те же самые методы для условных битов кода, создавая частичные классы и помещая материал, который изменяется между конфигурациями моего решения, в свои собственные файлы. Например, у меня есть sync_timersettings.cs, который является частичным классом, содержащим несколько констант, которые определяют, как часто мой код обновления вызывает веб-сервис. Или вы можете просто поместить все свои настройки в файл app.settings и сделать это таким образом.

Я считаю, что это очень гибкое решение, оно позволяет мне обменивать фрагменты javascript и css, и, если вы потратите время, чтобы поместить вещи, которые меняются между конфигурациями, в свои собственные файлы, вы, вероятно, можете перейти в состояние, когда вы можно выполнить отладку в конфигурации решения отладки, а затем переключиться на выпуск и развертывание в один клик.

Еще одно примечание:

#if DEBUG
    pnlDebugIncludes.visible = true
#else
    pnlReleaseIncludes.visible = true       
#endif

Ответы на комментарии:

Это полезно только в том случае, если у вас есть конфигурация решения отладки и еще одна конфигурация, предназначенная для развертывания в реальном времени. Он не будет работать, когда у вас (как и у меня) есть конфигурация промежуточного решения, выпуска и neilonhislaptop, поскольку символ DEBUG устанавливается только при включенной отладке. Обходной путь - перейти на страницу свойств вашего веб-приложения и на вкладке сборки добавить условный символ для каждой конфигурации вашей сборки. IE, настройте сборку на выпуск и поместите 'release' в поле условного обозначения на этой вкладке. Затем сделайте то же самое для разных конфигураций сборки, поле условного обозначения там автоматически изменится в зависимости от вашей конфигурации сборки. # если директивы условной компиляции будут работать как положено.

Байард запросил дополнительную информацию о том, как использовать это для изменения разметки между конфигурациями. Ну, вы могли бы использовать, чтобы поменять всю страницу .aspx - есть home.aspx.release и home.aspx.debug, но это означало бы, что вам пришлось бы повторять много разметки в каждом файле. Мое решение состоит в том, чтобы добавить частичный класс в мое приложение. Например, моя страница ViewImage содержит следующее определение класса:

public partial class ViewImage : System.Web.UI.Page

.. поэтому я создал несколько файлов классов с одинаковой подписью и назвал их «ViewImage_titleset.cs.debug» и «ViewImage_titleset.cs.staging»:

namespace Website
{
    public partial class ViewImage : System.Web.UI.Page
    {
        public void SetTitle()
        {
            Page.Title = "Running in debug mode";
        }
    }
}

и

namespace Website
{
    public partial class ViewImage : System.Web.UI.Page
    {
        public void SetTitle()
        {
            Page.Title = "Running in staging mode";
        }
    }
}

.. вызов SetTitle в событии загрузки страницы для ViewImage изменит заголовок в зависимости от конфигурации сборки. Это будет работать, только если вы изменяете страницу программным способом.

Лучше использовать метод условной компиляции, описанный выше, для изменения кода, подобного этому, и зарезервировать метод file-swap для замены не кодовых файлов, таких как images или web.configs. Просто убедитесь, что вы не установили альтернативные файлы для развертывания при публикации.

1 голос
/ 22 мая 2009

Что касается файлов JS, я использую Проекты веб-развертывания для предварительной компиляции веб-приложения. После того, как сборка завершится, если конфигурация будет Release, я уменьшу файлы JS и заменю файлы в выходном каталоге. Все это делается с помощью MSBuild , поскольку проекты веб-развертывания представляют собой файлы MSBuild.

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