2011-10-26 24 views
0

我們正在使用Visual Studio 2010,並且在我們的生產環境中,我們將一大堆資源放在CDN上。但是,當我們在本地調試時,我們想從相對本地路徑中獲取資源。如何在CSS本地與生產中處理更改的URL

所以在我們的CSS,我想能有我們的CSS,當我在本地運行它:

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

然而,當我發佈到Azure的,我想有CSS自動更新路徑爲:

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

這可能在Visual Studio 2010中嗎?

回答

4

我知道這可能不是你要找的答案,但作爲參考,你可以用FileUpdate任務中MSBuild Community Tasks,這將是這個樣子做:

<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> 
+0

你寫道:「我意識到這可能不是你正在尋找的答案」。爲什麼?這是唯一正確的流程和解決方案。 – Softlion

+0

@Softion主要是因爲我不認爲它是* visual studio中的東西。 [雖然可以改變,我現在知道。](http://www.richardhallgren.com/running-msbuild-scripts-from-visual-studio/) –

+0

正則表達式文件替換絕對要走的路。但是它並不值得CSS路徑是相對的,所以更容易重新定位CSS文件併爲資產保留相同的文件夾結構,而不是隻重新定位CSS引用的資源。 –

-1

您可以將基礎url放置在web.config文件中,並使用web config轉換根據它發佈的位置對其進行修改。

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

+0

-1:URL如何進入CSS文件? –

+0

沒有人說CSS必須是靜態的。這是ASP.net,它可以生成服務器端。 –

+0

一個例子似乎是按順序排列的。 –

0

在這裏,你是先生。與大多數開發人員一樣,我建議爲需要解決的各種應用程序使用單獨的樣式表。 ;)

你可以簡單地添加文字到您的標記在你的頭上<>是這樣的...

<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#代碼,但我想它應該工作一樣。乾杯;)

+0

我不想複製樣式表並在兩者中管理更改。相反,我想要使用替換變量的問題中描述的單個樣式表。 – TMC

相關問題