如何处理CSS本地与生产中的更改URL

时间:2011-10-26 06:23:11

标签: asp.net visual-studio visual-studio-2010 asp.net-mvc-3

我们正在使用Visual Studio 2010,在我们的生产环境中,我们将大量资源放在CDN上。但是,当我们在本地调试时,我们希望从相对本地路径中提取资源。

所以在我们的CSS中,我希望能够像在本地运行CSS一样使用CSS:

.foo {
    background:url(../images/bar.jpg);
}

但是,当我发布到Azure时,我想让CSS自动更新路径:

.foo {
    background:url(http://cdn.company.com/website/images/bar.jpg);
}

这在Visual Studio 2010中是否可行?

3 个答案:

答案 0 :(得分:4)

我意识到这可能不是您正在寻找的答案,但作为参考,您可以使用MSBuild Community Tasks中的FileUpdate任务执行此操作,这看起来像这样:

<PropertyGroup>
    <Configuration>Debug</Configuration>
    <TargetAddress>../images</TargetAddress>
    <TargetAddress Condition="'$(Configuration)'=='Release'">http://cdn.company.com/website/images</TargetAddress>
</PropertyGroup>

<Target Name="DeployCSS">
    <ItemGroup>
      <ScriptFiles Include=".\css\*.css"></ScriptFiles>
    </ItemGroup>
    <Copy SourceFiles="@(ScriptFiles)" DestinationFiles="@(ScriptFiles->'$(DeployPath)css\%(Filename)%(Extension)')"></Copy>
    <FileUpdate Encoding="ASCII" Files="@(ScriptFiles->'$(DeployPath)css\%(Filename)%(Extension)')" Regex="\.\./images" ReplacementText ="$(TargetAddress)"/>
</Target>

答案 1 :(得分:0)

你在这里先生。与大多数开发人员一样,我建议您为需要解决的各种应用程序使用单独的样式表。 ;)

您只需在&lt; head&gt;中为标记添加一个文字即可。像这样...

<asp:Literal ID="DynamicCSS" runat="server"></asp:Literal>

然后使用以下代码根据请求来源动态加载它们。

Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    If Request.Url.Host = "localhost" Then
        DynamicCSS.Text = "<link type=""text/css"" rel=""Stylesheet"" href=""Styles/style1.css"" />"
    Else
        DynamicCSS.Text = "<link type=""text/css"" rel=""Stylesheet"" href=""Styles/style2.css"" />"
    End If
End Sub
private void Page_Init(object sender, System.EventArgs e) {
    if (Request.Url.Host == "localhost") {
        DynamicCSS.Text = "<link type=\"text/css\" rel=\"Stylesheet\" href=\"Styles/style1.css\" />";
    } else {
        DynamicCSS.Text = "<link type=\"text/css\" rel=\"Stylesheet\" href=\"Styles/style2.css\" />";
    }
}

注意:我没有测试C#代码,但我想它应该也一样。干杯;)

答案 2 :(得分:-1)

您可以将基本网址放在web.config文件中,并使用网络配置转换根据其发布位置对其进行修改。

一些文档: http://msdn.microsoft.com/en-us/library/dd465326.aspx