C# 如何通过Web.Config动态更改Asp.net主题

C# 如何通过Web.Config动态更改Asp.net主题,c#,asp.net,web-config,build-process,publishing,C#,Asp.net,Web Config,Build Process,Publishing,摘要 我有一个超过5个主题的web应用程序。每个主题针对不同的客户提供完全不同的风格。每当我们发布应用程序的新版本时,我们都会将其发送给所有客户 问题。 我们在web.config文件的标记中指定主题。像 <page theme="Theme1" /> // or Theme2 for second customer. //或第二个客户的主题2。 通过这种方法,我们可以轻松地改变应用程序的风格,而无需编写代码,因为每个代码都需要新的发布 更改主题=“Theme1”。没有任何更改,

摘要

我有一个超过5个主题的web应用程序。每个主题针对不同的客户提供完全不同的风格。每当我们发布应用程序的新版本时,我们都会将其发送给所有客户

问题。

我们在web.config文件的
标记中指定主题。像

<page theme="Theme1" /> // or Theme2 for second customer.
//或第二个客户的主题2。
通过这种方法,我们可以轻松地改变应用程序的风格,而无需编写代码,因为每个代码都需要新的发布

更改
主题=“Theme1”
。没有任何更改,我们也没有在应用程序中编写代码,那么为什么更改
theme
不会更改主题,我们需要一个新的发布

我们希望在
web.config
或其他地方对其进行更改,通过更改主题,而无需对每个主题进行新的发布


更新:


我发布一次,然后为每个客户复制发布的版本(5次),然后在每个
web.config
文件中更改
theme=“CustomerTheme”
。但只有在发布过程中处于活动状态的主题在所有5个版本中可用,其他4个主题不可用

--

实际上,主要的问题是,为什么Web.Config中的更改需要不同的发布,而它是XML,而不需要complie。我应该补充一点,App_主题包括所有5个主题,以便所有主题都可以编译并随时使用

--

这是我发布应用程序的方式


更新2

这里我找到了其他人报告的确切问题。他解决了这个问题,但我无法理解他是如何解决这个问题的。谁能告诉我他是如何解决这个问题的

他使用
aspnet\u编译器命令
,并告诉
自动在页面指令上添加“主题”

(第一篇文章是问题,最后一篇文章是答案)


您是否将应用程序发布为预编译?如果是这样,这可能是原因


为什么不将要使用的主题存储在数据库表中,并在那里访问它,而不是web.config?这应该是真正的“动态的”。

如果我理解正确,每个客户都有一个主题,这不会改变吗

不过,我还是不明白你的出版方案?如果每个客户都有自己的web应用程序,为什么要更改主题

尽管如此,您还是可以检查codebehind中的请求url,并通过编程设置主题名称

伪代码:(您需要在每个请求上执行这段代码。您可以为此编写一个HTTPHandler,或者使用global.asax中的BeginRequest事件。您还需要找到哪个属性提供了必要的URL信息)


尽管这是一个非常古老的帖子,但我不认为被接受的答案是最好的。在这个链接上,是一个正确的答案,但没有它应该的那么清楚


他提到编译器正在向每个页面添加主题,因此服务器上的web.config文件无法更改主题。但他没有说要做什么来避免这种情况,这很简单。在编译网站之前,您只需从web.config中删除theme='Theme1'。如果没有,则编译器不会将主题设置为每个页面,您可以在您喜欢的每台服务器上使用相同的代码通过web.config更改主题。

我严格按照预编译的方式发布,这是为什么?那么解决方案是什么呢?我会用发布应用程序的方式的照片(和照片链接)更新这个问题,请看一看。我认为如果不以预编译的方式发布,就不能动态地对网站进行更改。我会将基于主题的信息存储在数据库中的某个位置,作为一个更可更新、更易于支持的解决方案。我在这里找到了一个解决方案
http://bytes.com/topic/asp-net/answers/495850-themes-web-config
你能解释一下他是如何解决这个问题的吗。我没有使用
aspnet\u compiler命令
他似乎没有找到解决方案,问题是-编译器正在将主题添加到page指令中,我怀疑您是否使用了compiler命令是不相关的,如果它是预编译的,它是不可动态更新的…您对我的要求100%正确。我必须在
Web.Config
中为每个客户更改主题,并且在Web.Config中只会发生一次,但只有使用它发布的主题才能工作,我不能为每个客户更改主题,然后我必须为每个客户发布整个应用程序。我不想使用代码,如果它可以有任何即时解决方案,我不明白你的意思。你所说的“那么我必须为每个人发布整个应用程序”是什么意思。如果您对代码库进行了更改,并且每个客户都有自己的web应用程序(就IIS应用程序而言),那么您肯定需要为所有客户发布它,以便进行更改。我想你需要再解释一下这个主题。我发布一次,然后为每个客户复制发布的版本(5次),然后在每个
web.config
文件中更改
Theme=“CustomerTheme”
。但只有在发布过程中处于活动状态的主题在所有5个版本中都可用,其他4个主题不可用。我会用发布应用程序的方式的照片更新问题。在我的公司,我们有一个项目,在生产服务器上的部署大约需要30分钟,因为项目中有很多文件。现在只剩下5分钟了。其他较小的项目,部署需要5分钟,现在只需要几秒钟。所以我的建议是:使用WebDeploy
switch(Request.URL)
{
 case "www.customer1.com":
    Theme = "Customer1";
    break;
 case "www.customer2.com":
    Theme = "Customer2":
    break;
}