C# 计算相对路径变化
假设我有一个带有以下行的.css文件C# 计算相对路径变化,c#,asp.net,C#,Asp.net,假设我有一个带有以下行的.css文件 body { background-image: url('../images/bg.png') } 我的构建过程会产生一些CSS魔法,最终会将此文件从 ~/Content/styles/styles.css 到 这将使文件中的url语句无效,需要重新写入。/Content/images/bg.png 这是我的问题-给定原始文件位置、新文件位置和文件中的背景图像url,是否有一种可重用的方法来计算图像的新相对路径 如果有人不知道CSS URL应该与CSS
body { background-image: url('../images/bg.png') }
我的构建过程会产生一些CSS魔法,最终会将此文件从
~/Content/styles/styles.css
到
这将使文件中的url语句无效,需要重新写入。/Content/images/bg.png
这是我的问题-给定原始文件位置、新文件位置和文件中的背景图像url,是否有一种可重用的方法来计算图像的新相对路径
如果有人不知道CSS URL应该与CSS文件相对应,则它包含在.< /P> < P>中,您可以考虑使用变量来描述图像路径(预生成作为构建的一部分)。那么你只有一件事要更新
> P>您可以考虑使用变量来描述图像路径(预生成作为构建的一部分)。那么你只有一件事要更新 解决方案1 如果使用ASP.NET主题,则可以解决此问题。但是,这也意味着您必须重新构造文件的方式 只需添加一个App_Themes文件夹,并在其下方添加一个带有主题名的文件夹(对于只有一个主题的站点来说,默认设置是一个不错的选择) 将主题名称添加到web.config中的
元素:
<pages theme="Default">
本示例假定您的图像文件位于
[AppFolder]/App_Themes/Default/Images/Buttons/login-sprite.gif
[AppFolder]/App_Themes/Default/Styles.css
您的css文件位于
[AppFolder]/App_Themes/Default/Images/Buttons/login-sprite.gif
[AppFolder]/App_Themes/Default/Styles.css
解决方案2
如果您不想重新排列文件,还可以动态生成文件或将其读入字符串,并在调用ResolveUrl后用实际url替换您选择的标记(例如#MyImageFile#),以确保其正确
您可以将这样的代码放入名为Styles.aspx的文件中:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'This is a wrapper for the CSS file that allows us to inject
'any image URLs directly into the file, accounting for any relative
'path differences between different environments.
Dim FileName As String = Server.MapPath("Styles.css")
Dim sr As StreamReader
Dim contents As String
sr = File.OpenText(FileName)
Try
contents = sr.ReadToEnd
Finally
sr.Close()
End Try
'Now that we have the contents of the file, run our
'function on it to replace the tokens
contents = Me.ProcessConfigurationTokens(contents)
Response.Clear()
Response.AddHeader("content-type", "text/css")
Response.Write(contents)
Response.End()
End Sub
然后将页面引用从Styles.css更改为Styles.aspx
这种方法会对性能造成影响,但使用缓存可以抵消这种影响。但是,我认为使用主题是最好的方法,因为它可以单独使用框架解决问题,而无需编写任何额外的代码。解决方案1 如果使用ASP.NET主题,则可以解决此问题。但是,这也意味着您必须重新构造文件的方式 只需添加一个App_Themes文件夹,并在其下方添加一个带有主题名的文件夹(对于只有一个主题的站点来说,默认设置是一个不错的选择) 将主题名称添加到web.config中的
元素:
<pages theme="Default">
本示例假定您的图像文件位于
[AppFolder]/App_Themes/Default/Images/Buttons/login-sprite.gif
[AppFolder]/App_Themes/Default/Styles.css
您的css文件位于
[AppFolder]/App_Themes/Default/Images/Buttons/login-sprite.gif
[AppFolder]/App_Themes/Default/Styles.css
解决方案2
如果您不想重新排列文件,还可以动态生成文件或将其读入字符串,并在调用ResolveUrl后用实际url替换您选择的标记(例如#MyImageFile#),以确保其正确
您可以将这样的代码放入名为Styles.aspx的文件中:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'This is a wrapper for the CSS file that allows us to inject
'any image URLs directly into the file, accounting for any relative
'path differences between different environments.
Dim FileName As String = Server.MapPath("Styles.css")
Dim sr As StreamReader
Dim contents As String
sr = File.OpenText(FileName)
Try
contents = sr.ReadToEnd
Finally
sr.Close()
End Try
'Now that we have the contents of the file, run our
'function on it to replace the tokens
contents = Me.ProcessConfigurationTokens(contents)
Response.Clear()
Response.AddHeader("content-type", "text/css")
Response.Write(contents)
Response.End()
End Sub
然后将页面引用从Styles.css更改为Styles.aspx
这种方法会对性能造成影响,但使用缓存可以抵消这种影响。但是,我认为使用主题是最好的方法,因为它可以单独使用框架解决问题,而不需要编写任何额外的代码。并没有真正回答我的问题。这个例子只有一个地方我需要改变它的值:-P.并没有真正回答我的问题。这个例子只有一个地方,我无论如何都需要更改值:-P。这两个都不适合我的需要,但你可能已经给了我一个想法。我很快会调查的。这两个都不适合我的需要,但你可能已经给了我一个想法。我很快会调查的。