我们正在使用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中是否可行?
答案 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文件中,并使用网络配置转换根据其发布位置对其进行修改。