• Vs .Net Framework 灵活配置


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

    比如:

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

    问题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 反之,所以在调试中所见即所得。

  • 相关阅读:
    tomcat解决 java.lang.IllegalArgumentException: Request header is too large
    mysql之表操作
    类的封装
    classmethod和staticmethod
    13-轮播实现(各种)
    12-事件委托(事件代理)
    python基础篇笔记03 迭代器、生成器、推导式、内置函数
    python基础篇笔记02 文件操作 序列解包**星号语法
    Django自定制分页器Pagination
    Ajax相关 及 解决csrf_token、Forbidden(CSRF)问题
  • 原文地址:https://www.cnblogs.com/zhuwansu/p/9262561.html
Copyright © 2020-2023  润新知