Я работаю над сайтом, где изображения и другие ресурсы будут расположены в отдельном домене от основного контента сайта. Мы будем использовать что-то вроде «www.example.com» для основного сайта, а затем «images.example.com» для всех дополнительных ресурсов для стилей и т. д.
При разработке сайта я сохраню все эти ресурсы на локальном dev. машины. Проблема здесь в том, чтобы поддерживать согласованность ссылок CSS между производственным сервером и средами разработки.
Я хотел создать ключ web.config, в котором будет храниться URL-адрес сервера изображений. Затем при переходе от разработки к производству я мог просто изменить значение web.config, и все было бы сделано.
Есть ли способ добавить значение в файл CSS, динамически или иным образом, из некоторого места в конфигурации или классе C#? Или я ошибаюсь?
Кроме того, я ограничен использованием .NET 2.0, если это имеет значение.
ОБНОВИТЬ
Чтобы подробнее остановиться на этом, я знаю, что могу использовать параметр web.config для URL-адресов серверных элементов управления. Они уже генерируются динамически. Что меня больше интересует, так это то, какие варианты у меня есть для изменения (или выполнения "что-нибудь") статических файлов CSS, которые позволят мне изменять URL-адреса для таких вещей, как ресурсы фонового изображения, на которые будут ссылаться в CSS. Могу ли я что-нибудь сделать, кроме поиска / замены значений с помощью моей IDE? Возможно, что-то, что можно сделать автоматически с помощью сценария развертывания?





Вы обманули свой вопрос:
https://stackoverflow.com/questions/449236/dynamically-setting-css-values-using-asp-net
Похоже, это какой-то ТАКОЙ глюк (может быть, кнопка отправки в вопросе была дважды нажата?). Я удалил это.
Это распространенная проблема. У нас есть отдельные файлы web.config для каждой среды. В web.config есть ключ appSettings, и любые значения конфигурации попадают туда вот так.
<appSettings>
<add key = "ImagePath" value = "d:\websites\www.site.com\www\images\" />
<appSettings>
При установке элемента управления изображением в коде позади используйте следующее:
myImage.ImageUrl = + _
System.Configuration.ConfigurationSettings.AppSettings ("ImagePath") + "image1234567890.jpg"
Просто измените ключ ImagePath, чтобы он соответствовал пути на рабочем сервере или сервере qa. Кроме того, вы можете сделать так, чтобы тестовый сервер имел тот же путь, но, по моему опыту, это решение работает.
Это отлично подойдет для серверного кода, но как насчет файлов CSS, которые (насколько мне известно) не могут быть изменены динамически.
Можно ли сохранить файл CSS на сервере изображений? Если это возможно, вы можете сделать все ссылки на изображения относительными, а затем вам просто нужно обновить ссылку на файл css.
<link rel = "stylesheet" href = "<%= ConfigurationManager.AppSettings("css-server") %>style.css" />
Если вы по-прежнему хотите отправлять или генерировать файл css динамически:
Файлы css не обязательно должны заканчиваться на css. aspx в порядке. Вы могли сделать это:
<link rel = "stylesheet" href = "style.aspx" />
а затем на вашей странице style.aspx:
protected void page_load(){
Response.ContentType = "text/css";
if (ConfigurationManager.AppSettings("css-server") == "local") {
Server.Transfer("css/local.css");
} else {
Server.Transfer("css/production.css");
}
}
Если вы все еще хотите динамически сгенерировать файл css, я бы использовал HttpHandler, установил тип содержимого на «text / css», а затем сгенерировал css с Response.Write. Если вы настаиваете на том, чтобы страница заканчивалась на css, вы всегда можете зарегистрировать css для перехода на asp.net в IIS, затем для входящих запросов в запросе global.asax application_Begin, если файл заканчивается на .css, используйте httpcontext.current.rewritepath вашему обработчику.
Это приведет к тому, что style.css будет динамически генерироваться во время выполнения.
Это интересная идея, о которой я не думал. Любая идея о том, как я могу заставить это работать с темами ASP.NET. Похоже, что это сделает темы невозможными (не большая проблема, но может быть проблематичной)
у вас могут быть файлы css все еще в каталоге тем для генерации ссылок, но просто пусть они будут пустыми файлами, которые никогда не будут затронуты, поскольку путь будет переписан на ваши страницы css, генерирующие aspx.
Мы используем такой метод для динамического изменения цвета наших сайтов в зависимости от того, в каком разделе вы находитесь. Работает приятно.
Я бы создал серверный элемент управления для своего CSS, который регистрировал блок сценария css при загрузке страницы. Вы можете очень легко изменить все пути в этой точке программно.
Как насчет того, чтобы поместить заполнитель на веб-страницу, а затем выбрать, какой файл CSS использовать (PROD, TEST и т. д.) Во время выполнения и добавить его в хранитель места?
Я думаю, что в обновлении была правильная идея ...
<link rel = "stylesheet" href = "<%= ConfigurationManager.AppSettings("css-server") %>style.css" />
Мне кажется, это работа для сценария NAnt [ссылка на сайт]. С ними довольно легко работать, и они хорошо документированы.
Таким образом, ваш код не меняет ваши ссылки css, они обновляются во время развертывания. Это не проблема кода, это проблема развертывания, поэтому мне кажется более "правильным" ее решение. Таким образом, вы будете знать, правильно ли он загружается (с правильными изображениями) при первой загрузке каждый раз. Скрипты NAnt - это хорошо иметь в своем арсенале инструментов.
Другие решения будут работать, но этот код будет запускаться каждый раз при загрузке страницы для изменения, которое должно было произойти однажды - при развертывании приложения.
Возможно, вы сможете что-то сделать с файлом hosts на вашем сервере (ах) разработки? Таким образом, вам не придется менять какой-либо код.
Однако можно отправлять файлы с расширением .css через движок asp.net. У вас также могут быть обработчики .ashx, которые возвращают действительный CSS и ссылаются на эти обработчики в тегах. Хотя это похоже на пустую трату процессора для материала, который на 90% состоит из статического текста.
вы должны удалить это, другой вопрос закрыт