背景:我们开发和部署项目时都是通过注释某些配置项
比如:
在调试时就注释掉生产的配置项,在生产时又要改回来,只有一个还好,如果多的话就会非常容易出错。
问题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 反之,所以在调试中所见即所得。