Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算相对路径变化_C#_Asp.net - Fatal编程技术网

C# 计算相对路径变化

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

假设我有一个带有以下行的.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。这两个都不适合我的需要,但你可能已经给了我一个想法。我很快会调查的。这两个都不适合我的需要,但你可能已经给了我一个想法。我很快会调查的。