背景:我们开发和部署项目时都是通过注释某些配置项

比如:

在调试时就注释掉生产的配置项,在生产时又要改回来,只有一个还好,如果多的话就会非常容易出错。

问题1:在发布时容易出错,需要控制发布时根据配置(debug 、release、etc) 自动生成对应的配置。

问题2:在调试时以最少修改切换配置。

以上两个问题拆解出下面的需求:

1、debug 配置和 release 配置分成两个文件。

2、保证debug 配置和 release 配置,配置项的数量相等。(需求 1 引发的二级需求)

3、可以看到所有配置项都有哪些。(需求 1 引发的二级需求)

4、在编译成功后自动应用指定的配置。

5、在发布成功后自动应用指定的配置。

6、最少修改切换配置。

搜集到的解决方案

1、使用 TransformFile发布时 转换 web.config 文件。ps:TransformFile 文件指如 App.config 存在子依赖文件 App.Debug.config 且 在.csproj 文件中被标记为 IsTransformFile  的特定配置文件。

2、使用 SlowCheetah 插件+ TransformFile 在编译是转换 *.config 文件。SlowCheetah 添加所有 *.config 文件的转换文件。

3、使用  configSource="other.config" 特性 使用其他 .config 文件替换 *.config 文件中的 appSettings 或 connectionStrings节点(可在调试中手动修改other.config )。

4、使用 生成事件-生成成功后事件 添加 Cmd 命令如: copy /y $(ProjectDir)App.$(ConfigurationName).config $(TargetPath).config 在生成成功后拷贝自定义配置文件覆盖输出的配置文件。

5、添加自定义配置 DebugRelease 继承 Debug 配合 2 添加 TransformFile 配合 5 在项目生成前事件拷贝 Release TransformFile 到 DebugRelease  TransformFile  文件中。实现调试生产环境。

7、添加一个 bat 文件手动调用修改 TransformFile 。

8、手动修改 项目属性-Release 配置-优化代码-取消勾选以 release 方式启动项目达到调试生产环境配置的效果。和 5 大同小异。

9、参考 .net framework 配置文件架构 https://docs.microsoft.com/zh-cn/dotnet/framework/configure-apps/file-schema/ 使用配置文件 配置 指定语言提供程序设置 如:

<configuration>
<system.codedom>
<compilers>
        <!-- zero or more compiler elements -->
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" compilerOptions="/optimize" warningLevel="1" />
   </compilers>
</system.codedom>
</configuration>

在 debug 情况也下会优化 cs 代码(compilerOptions="/optimize"),相当于 debug 配置的 release 效果 。

最后关于 Debug和 Release

所谓配置 debug release ,它们仅仅是缺省的两个配置而已,自己也可以添加更多。

debug 和 release 的重要区别在于 debug 默认是不优化代码,release 反之,所以在调试中所见即所得。

Vs .Net Framework 灵活配置的更多相关文章

  1. 【FICO系列】SAP 参数(条件表)灵活配置GS01/GS02/GS03

      公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP 参数(条件表)灵活配 ...

  2. 前端快闪三:多环境灵活配置react

    你已经使用Create React App脚手架搭建了React应用,现在该部署了. 一般会使用npm run build或者yarn build构建出静态资源, 由web服务器承载. 您会体验到 多 ...

  3. robot framework 安装配置

    robot framework 是一款专门用作自动化测试的框架,提供了丰富的内置库,与第三方库,也支持用户自己编写的库,robot framework +library 可以 用来做ui的自动化测试, ...

  4. 参数(条件表)灵活配置GS01/GS02/GS03

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. Hush Framework框架配置

    在写这篇文章的时候,楼主已经饿的不行了,因为我从3点开始就在折腾Hush Framework,走了很多弯路,打铁要趁热,先把基本的过程记录下来,留待以后翻阅,同时记录其中容易走弯路的地方,特别是对于一 ...

  6. 关于Entity Framework关系配置,提示列名XXXX_Id无效的问题

    问题描述 : 数据库中有两张表,如下: Member(会员)表有外键RoleId,对应的是Role(角色)表的主键Id,业务逻辑是Member表的RoleId必须与Role表的Id对应(但在设计数据表 ...

  7. Hush Framework框架配置(续) 转自《Android和PHP最佳实践》官方站

    图书资源下载 Xampp 开发环境下载:http://pan.baidu.com/share/link?shareid=531771&uk=773037279 微博实例完整源码包下载:http ...

  8. Hush Framework框架配置(转)

    在写这篇文章的时候,楼主已经饿的不行了,因为我从3点开始就在折腾Hush Framework,走了很多弯路,打铁要趁热,先把基本的过程记录下来,留待以后翻阅,同时记录其中容易走弯路的地方,特别是对于一 ...

  9. Kali之Metasploit Framework环境配置

    运行Metasploit Framework 依照Kali Linux网络服务策略,Kali没有自动启动的网络服务,包括数据库服务在内.所以为了让Metasploit以支持数据库的方式运行有些必要的步 ...

随机推荐

  1. SVM笔记

    1.前言 SVM(Support Vector Machine)是一种寻求最大分类间隔的机器学习方法,广泛应用于各个领域,许多人把SVM当做首选方法,它也被称之为最优分类器,这是为什么呢?这篇文章将系 ...

  2. JavaWeb学习 (二十五)————监听器(Listener)

    一.监听器介绍 1.1.监听器的概念

  3. nexus-3.2.0-01.zip安装以及如何启动服务

    1. 在之前的版本中,启动nexus服务都是在cmd中输入 nexus install来安装服务,nexus start来启动服务. 2. 在nexus-3.2.0-01中,直接在nexus根目录下的 ...

  4. 8.中断按键驱动程序之poll机制(详解)

    本节继续在上一节中断按键程序里改进,添加poll机制. 那么我们为什么还需要poll机制呢.之前的测试程序是这样: ) { read(fd, &key_val, ); printf(" ...

  5. Java并发编程:什么是CAS?这回总算知道了

    无锁的思想 众所周知,Java中对并发控制的最常见方法就是锁,锁能保证同一时刻只能有一个线程访问临界区的资源,从而实现线程安全.然而,锁虽然有效,但采用的是一种悲观的策略.它假设每一次对临界区资源的访 ...

  6. Java基础——Oracle(一)

    Oracle是目前最流行的数据库之一.功能强大,性能卓越.所以学起来比较困难.学习Oracle需要具备一定的基础.比如学习过一门编程语言,或者学过其他的数据库等,没有一些基础很难下手. 一.Oracl ...

  7. MVC中Controller与View中间的数据传递的常用方法

    这几天正在学习MVC,顺便就将自己每天的学习心得记录下来与大家分享一下吧! 在MVC中,Controller与View之间传递数据是很频繁的事情,所以在这里就总结一下我自己在学习中使用的几种常用的方法 ...

  8. 做webApp遇到的一些坑及解决方案

    1.问题:手机端click事件会有大约300ms的延迟 原因:手机端事件touchstart-->touchmove-->touchend or touchcancel-->clic ...

  9. php curl中x-www-form-urlencoded与multipart/form-data 方式 Post 提交数据详解

    multipart/form-data 方式 post的curl库,模拟post提交的时候,默认的方式 multipart/form-data ,这个算是post提交的几个基础的实现方式. $post ...

  10. 【工具相关】Web--nodejs的安装

    一,从官网下载nodejs.org. https://nodejs.org/en/ 二,按照步骤一步一步安装就好.