gpt4 book ai didi

c# - 计算相对路径变化

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:33 24 4
gpt4 key购买 nike

假设我有一个包含以下行的 .css 文件

body { background-image: url('../images/bg.png') }

我的构建过程做了一些 CSS 魔术,最终将这个文件从

~/Content/styles/styles.css

~/temp/styles.css

这会使文件中的 url 语句无效,需要重写为 ../Content/images/bg.png

这是我的问题 - 给定原始文件位置、新文件位置和文件中的背景图像 url 是否有可重用的方法计算图像的新相对路径?

如果有人不知道 css url 应该与它包含的 css 文件有关。

最佳答案

解决方案一

如果您使用 ASP.NET 主题,则可以解决此问题。然而,这也意味着您将不得不重组文件的方式。

只需添加一个 App_Themes 文件夹和一个带有主题名称的文件夹(对于只有 1 个主题的站点,“默认”是一个不错的选择)。

将您的主题名称添加到 <pages> web.config 中的元素:

<pages theme="Default">

然后将您的 css 文件放入主题文件夹中。删除您用来引用 css 文件的任何代码,因为 ASP.NET 会自动将它连接到您的所有页面。

如果您想更好地控制添加了 css 的页面,您可以简单地将主题添加到页面上的 @page 指令,或者在 Page_PreInit 事件而不是 Web.配置文件。

现在,如果您还将图像放在主题文件夹下,则可以像这样从 css 中引用它们:

background-image: url('Images/Buttons/login-sprite.gif');

此示例假定您的图像文件位于该位置

[AppFolder]/App_Themes/Default/Images/Buttons/login-sprite.gif

并且您的 css 文件位于该位置

[AppFolder]/App_Themes/Default/Styles.css

方案二

如果您不想重新排列文件,您还可以动态生成文件或将其读入字符串,并在调用 ResolveUrl 以确保它是正确。

您可以将这样的代码放在名为 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。

这种方法对性能有影响,但可以使用缓存来抵消。但是,我认为使用 Themes 是最好的方法,因为它仅使用框架就解决了问题,而无需编写任何额外的代码。

关于c# - 计算相对路径变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com