• .NET Framework 项目多环境下配置文件web.config


      

         解决jenkins自动构建发布的问题,统一从git/svn库中获取项目文件,根据不同配置编译发布到多个运行环境中。

          转自:https://www.cnblogs.com/hugogoos/p/6426887.html

           调试,发布Asp.net程序的时候,开发环境和发布环境的Web.Config往往不同,比如connectionstring等。如果常常有调试,发布的需求,就需要常常修改web.config文件,这往往是一件非常麻烦的事情。

      Web.Config Transformation能够在不同的发布环境下,产生不同的web.config文件,非常方便和实用。

      在新建的Web项目中有个默认的web.config, 还可以定义格式为web.[name].config文件, 这个配置文件定义的规则, 在发布的时候, 会对web.config文件进行修改。

      默认项目中, 会创建Web.Debug.config和Web.Release.config文件,分别对应于Debug和Release环境。

     

      假如我们要常常发布到测试服务器上,测试服务器和开发时候的connectionstring是不同的,看看如何使用Web.Config Transformation来解决这个问题。

      1,首先添加Test配置

      菜单Build->Configuration Manager, 就能看到如下的配置窗口, 添加一个新的配置Test.

     

    也可以从这而进入添加

     

      2,添加Test config Transformation文件

      在web.confg上,点击右键,Add Config Transform, VS就会为刚刚新建的Test配置新增Transformation文件 Web.Test.config

     

      3. 修改Web.Test.config文件

      下面的Web.Test.config中能够替换web.config中的connectionstring, 关键是这一段

     

      这段代码要释放出来的。

    <add name="MyDB"   connectionString="Data Source=TestSQLServer;Initial Catalog=MyTestDB;Integrated Security=True"   xdt:Transform="Replace" xdt:Locator="Match(name)"/>

      xdt:Transform="Replace", 指的是用来做替换操作

      xdt:Locator="Match(name), 指的是匹配规则,这里是匹配name

      意思是用Web.Test.config中的这个配置节用来替换web.config中name为MyDB的配置

      4. 检查发布的结果

      选择在Test配置下publish网站,你能看到最终的web.config文件,已经实现了替换connection string.

     

      到这里已经就完成了多环境发布配置问题了,而不需要每次发布都要修改配置。

      这只是解决了发布时的问题,细心的同学应该发现我上面还提到了调试。

      其实有时候为了还原bug可能要链接不同的环境进行测试,怎么样可以在程序编译的时候就进行选择不同的配置呢?

      首先找到当前项目

     

      用记事本打开拉到最下面:

     

      加入红框中的这段话就可以了。

      先看看原始的配置

      web.config的配置为:

     

      web.debug.config的配置为:

     

      web.Test.config的配置为:

     

      这时只要选择

     

      选择重新生成解决方案,

     

      选择替换,web.config配置就会被替换为web.test.config中的配置了,如下图web.config的配置:

     

      connectionString的值替换为Test中的配置了。

    <Target Name="BeforeBuild">
    
        <TransformXml Source="Web.Debug.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
    
      </Target>

      这句话的意思就是以Web.Debug.config里面的配置为模板,生产配置存放到web.config里面

      如下图在Debug新加一个键值

     

      在选择Test重新生成一次

     

      发现多了一个Debug配置的Key.

      其实在编译时支持改变配置文件会有副作用的可能会对版本控制有影响,比如,你刚改了web.config,然后你用了一个debug的配置去编译,你的web.debug.config就会自动覆盖web.config,然后你之前的修改就没了。比较理想的方式是需要一个第三方的web.base.config,所有的环境配置文件,例如web.debug.config,都基于web.base.config去修改,就是以web.base.config为模板,web.config成为修改后的目标文件,本身是只读的,不允许修改,只允许生成,同时也不签入到版本库。

    以下为自己尝试使用的方式:

    项目文件中增加配置:

    <Target Name="BeforeBuild">
        <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
    </Target>

    jenkins中 增加MSBuild配置:

    MSBuild Build File
    Test.csproj
    CommandLine Arguments
    /t:Rebuild /P:Configuration=Release /p:VisualStudioVersion=15.0 /p:DeployOnBuild=True;PublishProfile=Test.pubxml

    Configuration=Release / Test ,不同环境配置不同。

    有兴趣的同学可以自行去查询 Web.Config Transformation的具体语法。https://www.cnblogs.com/worksguo/archive/2009/08/29/1556307.html

  • 相关阅读:
    理解Docker(6):若干企业生产环境中的容器网络方案
    理解Docker(5):Docker 网络
    理解Docker(4):Docker 容器使用 cgroups 限制资源使用
    理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境
    理解Docker(2):Docker 镜像
    理解Docker(1):Docker 安装和基础用法
    OpenStack 行业正进入拓展期:行业云将成为新一轮工业革命的基础设施和引擎
    PHP通用返回值设置
    C++ 模板学习 函数模板、类模板、迭代器模板
    C++/Php/Python 语言执行shell命令
  • 原文地址:https://www.cnblogs.com/yangyuping/p/12023619.html
Copyright © 2020-2023  润新知