[Solution] 如何更好的管理MVC项目的Web.Config

投石问:

很多时候在Web.Config中的配置在生产与Prod环境都是有所不同的 , 一大堆绿绿的注释,debug的设置与 pord的设置混合在一起,这个你能忍?!

那么如何更好的去管理自己项目中的 Web.Config , ok , let‘s moving .

问路答:

在编译发布的过程中,Microsoft Visual Studio 2010 及以下版本 会以 Web.Config为基础,而后基于编译的模式(debug or release)对 Web.Debug.Config 和 Web.Release.Config 进行加载,最终生成对应后的配置文件

第 1 步:在Web.Debug.Config 与 Web.Rlease.Config中添加 xml 命名空间

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

第 2 步:学习使用 Locator特征语法

2-1 Locator="Condition(XPath expression)"

  <!-- 在Web.Cong中选择其 name == oldname 或 providerName == oldprovider 的Add元素,使用此连接串元素进行替换 -->
  <connectionStrings>
    <add name="DebugConnection1" connectionString="Data Source=DebugSQLServer;Initial Catalog=DebugDb;Integrated Security=True" providerName="newprovider"
       xdt:Locator="Condition(@name=‘oldname‘ or @providerName=‘oldprovider‘)"  xdt:Transform="Replace" />
  </connectionStrings>

2-2 Locator="Match(comma-delimited list of one or more attribute names)"

 <!-- 在Web.Cong中选择其 name == DebugConnection1 的Add元素,使用此连接串元素进行替换 -->
  <connectionStrings>
    <add name="DebugConnection1" connectionString="Data Source=DebugSQLServer;Initial Catalog=DebugDb;Integrated Security=True" providerName="newprovider"
         xdt:Locator="Match(name)"  xdt:Transform="Replace" />
  </connectionStrings>

2-3 Locator="XPath(XPath expression)"

 <!-- Web.Cong中选择 XPATH == configuration/connectionStrings[@name=‘DebugConnection1‘ or @providerName=‘System.Data.SqlClient‘]的元素,使用此Add元素进行替换  -->
<configuration xmlns:xdt="...">
  <connectionStrings>
    <add name="DebugConnection1" connectionString="Data Source=DebugSQLServer;Initial Catalog=DebugDb;Integrated Security=True" providerName="newprovider"
         xdt:Locator="XPATH(configuration/connectionStrings[@name=‘DebugConnection1‘ or @providerName=‘System.Data.SqlClient‘])" xdt:Transform="Replace" />
  </connectionStrings>
</configuration>

以上的XPath表达式是将当前Add元素 (configuration/connectionStrings) 的隐式 XPath 条件与显式指定的表达式组合起来的结果

注1:Locator  特性是可选的。如果未指定元素的Locator 特性,默认是这个元素将会找到第一个符合自上往下的结构的标签名的元素执行已设置的 Transform 特性。例子如下:

<!-- 将替换整个 system.web 元素,因为未指定任何 Locator 特性来指示其他方面 -->
<system.web xdt:Transform="Replace">
    <customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly">
    <error statusCode="500" redirect="InternalError.htm"/>
   </customErrors>
</system.web>

第3步 学习使用 Transform 特征语法

转换 描述
xdt:Transform=“Replace” 替换第一个匹配Locator的节点元素
xdt:Transform=“Remove” 清除第一个匹配Locator的节点元素
xdt:Transform=“RemoveAll” 清除所有匹配的节点标签名的元素
xdt:Transform=“Insert” 将指定的元素添加到同级元素的末尾
xdt:Transform=“SetAttributes(attributeNames)” 找到指定的元素,并修改对应属性的值
xdt:Transform=“RemoveAttributes(attributeNames)” 找到指定的元素,如果有指定的属性,清除属性
xdt:Transform=“InsertBefore(XPath)” 在指定Xpath前插入指定元素
xdt:Transform=“InsertAfter(XPath)” 在指定Xpath后插入指定元素

注2:Locator 特性可置于父级元素中。那么其子元素的集合将自动适应已设置的Transform特性,默认是 if exist replace , else add .

注3:如果指定的元素只有 Locator 特性而没有指定任何的 Transform 特性,那么将不会发生任何 Transform特性的操作,小心与 注1 混淆

注4:父元素上的 Transform 特性会影响其所有的子元素,即使没有为子元素指定任何 Transform 特性也是如此 , 故尽量不要在 父元素 中设置 Transform 特性。

参考文献:

用于 Web 应用程序项目部署的 Web.config 转换语法

ASP.net 4.0 新特性:Web.Config Transformation

时间: 2024-10-13 19:56:29

[Solution] 如何更好的管理MVC项目的Web.Config的相关文章

Spring mvc项目的web.xml以及注释

web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="3.0"    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   

Visual Studio 中用于 ASP.NET Web 项目的 Web 服务器

Visual Studio 中用于 ASP.NET Web 项目的 Web 服务器 当您在 Visual Studio 中开发 Web 项目时,需要 Web 服务器才能测试或运行它们.             利用 Visual Studio,您可以使用不同的 Web 服务器进行测试,包括 IIS Express.Internet Information Services (IIS).外部主机或自定义 Web 服务器.  您可以将其中任何一种 Web 服务器用于基于文件的 Web 应用程序项目.

我没发现Mvc里的 web.config 有什么用。

实验过程 由于 Mvc2+ 引入 Area ,导致文件夹结构发生变化. Mvc下的 web.config 所在的位置是: ~/Areas/MySystem/Views/Web.config 对应的请求的URL是: ~/MySystem/Home/Index 这时, 在根目录下添加 AppSetting 项: <add key="AdminUserId" value="LhlcAdministator"/> 在 ~/Areas/MySystem/Views

如何修改MyEclipse项目的web context-root

修改一个MyEclipse项目的名称很容易,右键点项目->rename就行了. 但此时项目的web context-root 还没有改变,需要右键点项目->properties->MyEclipse->Web->Web context-root,修改成你想要的新名,点OK就可以了. 细节如下图. 2016年8月23日11:29:58

Visual Studio中用于ASP.NET Web项目的Web服务器

当您在 Visual Studio 中开发 Web 项目时,需要 Web 服务器才能测试或运行它们. 利用 Visual Studio,您可以使用不同的 Web 服务器进行测试,包括 IIS Express.Internet Information Services (IIS).外部主机或自定义 Web 服务器. 您可以将其中任何一种 Web 服务器用于基于文件的 Web 应用程序项目. 对于基于文件的网站项目,您可以使用 IIS Express. 本主题介绍每种 Web 服务器以及如何选择要用

如何管理好项目的DLL

.net fx自带的dll net fx自带的dll,直接添加,注意.net fx版本即可. 第三方类库 如果是第三方类库,使用NuGet从NuGet官网下载,比如json.net,jQuery等. 公司内部通用类库 如果是公司内部通用类库,搭建私有的NuGet类库服务器共享,比如CtripSZ.Frameworks,CtripSZ.Frameworks.Log等. 注意:通用类库中如果要引用第三方类库,尽量选低,并且稳定的版本,这样,其它系统引用这个通用类库时,一方面可以保持兼容,另一方面可以

maven web项目的web.xml报错The markup in the document following the root element must be well-formed.

maven项目里面的web.xml开头约束是这样的 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java

Cocos2d-x项目的MVC框架

Cocos2d-x项目的MVC框架 本篇所用的Cocos2d-x版本为:Cocos2d-x 3.2 当我们已经开始搭建好项目,着手开始写代码的时候,我想同学们肯定会遇到这样的一个问题: 某些UI类在加载到父级上之后,经常毫无原由的造成崩溃现象.或者代码写了好几千行,难以进行维护及其他人帮助处理等.这是为什么呢? 其实,就是因为2点: 你对Cocos2d-x还是不够了解 你没有框架的概念 其实,这种问题往往是因为,你子级元素在父级addchild之前,就开始调用到了父级元素.或者说你就一直埋头去写

4.20日第13次作业.,20章战略管理,21章业务流程管理和重组,22章知识管理,高项,29-田哲琦

4.20日第13次作业.,20章战略管理,21章业务流程管理和重组,22章知识管理,高项,29-田哲琦 20章.战略管理1.企业战略的特点有哪些?P420-421 答:1).全局性 2).长远性 3).抗争性 4).纲领性 2.企业战略决策的特点有哪些?P421答:1).决策的对象是复杂的,很难把握住它的结构,并且是没有先例的,对其处理上也是没有经验可循. 2).面对的问题常常是突发性的.难以预料的.所依靠的是来自外部的关于未来如何变化的很少的情报. 3).决策的性质直接涉及到企业的前途. 4)