使用ASP.NET动态设置CSS值

我正在一个网站上,图片和其他资源将位于与网站主要内容不同的域中。 我们将为主站点使用类似“www.example.com”的内容,然后使用“images.example.com”获取样式的所有额外资源等。

在开发网站时,我会将所有这些资源保存在本地开发中。 机器。 这里的挑战是在生产服务器和开发环境之间保持CSS引用的一致性。

我想要做的是创建一个web.config键,用于存储图像服务器的URL。 然后,当从开发切换到生产时,我可以只更改web.config值,一切都会完成。

有没有办法从配置或C#类中的某个位置动态或以其他方式向CSS文件添加值? 或者我是以错误的方式来做这件事的?

此外,如果有所不同,我只能使用.NET 2.0。

UPDATE
为了进一步扩展这一点,我知道我可以使用web.config设置服务器控件的URL。 这些已经动态生成。 我更感兴趣的是我有什么选择来修改(或做“ 某事 ”)静态CSS文件,这将允许我更改CSS中引用的背景图像资源等URL。 除了使用我的IDE查找/替换值之外,我还能做些什么吗? 也许某些事情可以通过部署脚本自动完成?

将CSS文件保留在图像服务器上是一个选项吗? 如果可能,您可以使所有图像引用相对,然后您只需要更新到css文件的链接。

 style.css" /> 

如果您仍想动态发送或生成css文件:

css文件不必以css结尾。 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,将contenttype设置为“text / css”,然后使用Response.Write生成css。 如果你坚持让页面以css结尾,你可以随时注册css转到IIS中的asp.net,然后注册global.asax application_Begin请求中的传入请求,如果文件以.css结尾,请使用httpcontext.current.rewritepath你的经纪人。

这将在运行时动态生成style.css的净效果。

如何将占位符放在网页上,然后在运行时选择要使用的CSS文件(PROD,TEST等)并将其添加到地点hodler?

我认为Update有正确的想法……

 style.css" /> 

听起来像是一个NAnt [ link ]脚本给我的工作。 他们很容易合作并且有很好的文档记录。

这样你的代码就不会改变你的css链接,它们会在部署时更新。 这不是代码问题,这是一个部署问题,所以解决这个问题对我来说更“合适”。 这样你知道它是否每次第一次加载时都正确加载(使用正确的图像)。 NAnt脚本是您工具箱中的好东西。

其他解决方案都可以使用,但是每次页面加载时都会运行该代码以进行应该发生一次的更改 – 部署应用程序时。

这是一个常见问题。 我们所做的是为每个环境分配web.config文件。 web.config中有一个appSettings键,任何配置值就像这样。

    

在后面的代码中设置图像控件时,请使用以下命令:

 myImage.ImageUrl = + _ 

System.Configuration.ConfigurationSettings.AppSettings(“ImagePath”)+“image1234567890.jpg”

只需更改ImagePath密钥即可与生产服务器或qa服务器上的路径相对应。 此外,您可以使测试服务器具有相同的路径,但根据我的经验,此解决方案可行。

我会为我的CSS创建一个服务器控件,在页面加载时注册css脚本块。 您可以通过编程方式轻松更改该点上的所有路径。

也许你可以对你的开发服务器上的hosts文件做些什么? 这样您就不必实际更改任何代码。

但是,可以通过asp.net引擎发送带.css扩展名的文件。 您还可以使用.ashx处理程序返回有效的css并在标记中引用这些处理程序。 对于90%静态文本的东西来说,似乎有点浪费处理器。