2011-10-26 10 views
0

私たちはVisual Studio 2010を使用しています。プロダクション環境では、私たちはたくさんのリソースをCDNに入れています。しかし、ローカルでデバッグしているときには、相対的なローカルパスからリソースを取得する必要があります。CSSローカルとプロダクションのURLの変更を処理する方法

だから、私たちのCSSに、私はローカルで実行する場合など、当社のCSSを持ってできるようにしたい:私はアズールに公開するとき

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

はしかし、私はCSSを持つようにしたい自動的に更新

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

これはVisual Studio 2010で可能ですか?

答えて

4

は、あなたが探している答えではありませんが、参考のために、あなたはこのようになりますMSBuild Community TasksFileUpdateタスク、でこれを行うことができます:

<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主に私はそれをビジュアルスタジオのなんかとは思わないからです。 [それを変えることはできますが、今私は知っています。](http://www.richardhallgren.com/running-msbuild-scripts-from-visual-studio/) –

+0

正規表現ファイルの置き換えは間違いなく道のりです。しかし、CSSパスが相対的であることは何の価値もないので、CSSファイルを再配置し、CSSが参照するアセットだけを再配置するのではなく、アセットのフォルダ構造を維持する方が簡単です。 –

-1

web.configファイルにベースURLを置き、web configトランスフォームを使用して、公開されている場所に基づいてベースURLを変更できます。

いくつかのドキュメント:私はおそらくこの実現 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

私はスタイルシートを複製して両方の変更を管理したくありません。代わりに、置換varsの質問に記述されているように、単一のスタイルシートが必要です。 – TMC

関連する問題