在项目中,通常会遇到:调试程序和程序在线上运行时程序运行的参数不一样,

例如线上运行时程序是获取线上的机器的ip,而调试程序时,我们会指定一个ip进行调试。

又或者项目要与多个系统进行数据交换,调试的时候想屏蔽掉(不执行)这些交互的代码。

这时,我们想:要是程序能知道我们是在用Visual Studio进行调试,还是用户点击的exe执行文件使用系统,

那该美好呀!这就是Debug模式!下面我用自己的方法,实现了让程序知道是用户点的exe还是vs在调试程序。

首先我建了一个wpf应用程序(windowsForm或webForm或其它应用程序都可以),wpf程序界面上只有一个TextBlock,

用来显示当前是Debug模式或是 非Debug模式。如下图:

然后选中工程-右键-添加-新建项-应用程序配置文件(app.config),如下图:

双击app.config文件,新增两个相同key值的appSetting,key值为IsDebug,value的值分别为true和false,然后注释掉其中一个,如下图:

打开wpf程序窗体的cs文件(MainWindow),添加一个bool类型的IsDebug属性,

然后在MainWindow的构造函数里获取配置文件key值为IsDebug的value,给IsDebug属性赋值,如下图:

至此,我们就可以通过IsDebug属性来判断当前是不是Debug模式了。用VS进行调试程序时,把配置文件里的key值为IsDebug的Value设置为true,

发布程序时把配置文件里的key值为IsDebug的Value设置为false。

然后程序要判断是否是Debug模式时,只需判断IsDebug属性了。

当配置文件里的key值为IsDebug的value为true时,程序运行截图如下:

当配置文件里的key值为IsDebug的value为false时(注释为true的配置文件字符串,把为false的取消注释):

程序运行截图如下:

程序源码如下:

XAML:

<Window x:Class="IsDebug_Demo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBlock x:Name="tb"/>
</Grid>
</Window>

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration; namespace IsDebug_Demo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
private bool isDebug;
/// <summary>
/// 是否是Debug模式
/// </summary>
public bool IsDebug
{
get { return isDebug; }
set { isDebug = value; }
} public MainWindow()
{
InitializeComponent();
//获取配置文件key值为IsDebug的value,给IsDebug属性赋值,用来判断当前是否为Debug模式
this.IsDebug = bool.Parse(ConfigurationManager.AppSettings["IsDebug"]);
if (IsDebug)
{
tb.Text = "这是Debug模式!";
tb.Foreground = Brushes.Red;
}
else
{
tb.Text = "这不是Debug模式!";
tb.Foreground = Brushes.Green;
}
}
}
}

配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!--<add key="IsDebug" value="true" />-->
<add key="IsDebug" value="False" />
</appSettings>
</configuration>

简单粗暴的“Debug模式”的更多相关文章

  1. 简单粗暴套娃模式组json发送https请求

    各位童鞋大家好,向来简单粗暴的铁柱兄给大家来玩一手套娃模式来组Json数据,不说别的,无脑套. 当然,这一手比较适合临场用一下,若长期用的话建议搞一套适用的框架,只管set就好了.话不多说开始上课. ...

  2. JAVA设计模式之简单粗暴学建造者模式

    文章由浅入深,先用简单例子说明建造者,然后分析模式的优缺点,最后结合优秀开源框架Mybatis,说明该模式的用处. 1.先定义一个机器人模型 package com.jstao.model; publ ...

  3. eclipse中的tomcat debug模式启动报超时45s

    在eclipse中加入tomcat,开debug模式非常好用,这里就不介绍了 最近eclipse的tomcat开debug模式就是启动不了,增加时间也不能解决,但是非debug模式就可以打开,我觉得是 ...

  4. LeakCanary:简单粗暴的内存泄漏检測工具

    差点儿每一个程序猿在开发的过程中都会遇到内存泄漏.那么我们怎样检測到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检測内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内 ...

  5. 简单粗暴地理解js原型链--js面向对象编程

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  6. MySQL 编译安装并且开启DEBUG模式

    因为想分析下mysql中一些操作的内部执行过程,单纯的看源码太枯燥了,所以决定结合mysql的执行过程来分析,mysql作为一款成熟的数据库软件,在设计的时候就考虑到了调试的问题,只是想开启调试模式的 ...

  7. 简单粗暴地理解 JavaScript 原型链 (一个充满歪门邪理的理解方法,有助于新手哦!)

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  8. 好文要顶之 --- 简单粗暴地理解 JavaScript 原型链

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  9. Xcode中使用debug模式和release模式

    在开发过程中,我们经常需要用到NSLog输出一些信息,甚至有的开发过程,必须在控制台查看输出,有经验的程序员通过控制台输出就能知道整个数据交互的一个流程.但是一个发布的程序,里面带有太多的NSLog输 ...

随机推荐

  1. PAT 团体程序设计天梯赛-练习集 L1-020. 帅到没朋友

    原题  https://www.patest.cn/contests/gplt/L1-020 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友.本题就要求你找出那些帅到没有朋友的人. ...

  2. 【Unity】Unity中C#与Android中Java的互相调用遇到的一些问题

    1.有关调用的一些问题: (1).在C#中直接调用java中的代码,无返回值: 在java中: public static void setAge(Context context , int leve ...

  3. html5 article标签举例

    <article> 是html5中引入的新标签可以实现正向反向列表排序功能 使用以前的html4进行列表排序,可以使用下列形式 <h1>Top Three Teams</ ...

  4. 游戏Demo(持续更新中...)

    格斗游戏 主要用于联系Unity的动画系统,并加入了通过检测按键触发不同的技能. WASD控制方向,AD为技能1,SW为技能2,右键跳跃,连续单机普通连招. 本来是要用遮罩实现跑动过程中的攻击动作,但 ...

  5. JS 之完美运动框架 如何同时改变元素多个属性?

    正如改变一个属性的方法,可以使用已经写好的运动函数如move(obj,attr,target,fn);我们可能会想这样做, 调用两次运动函数,如同时改变宽和高,move(obj,'width',tar ...

  6. C# 语言规范_版本5.0 (第0章 目录)

    C# 语言规范 版本5.0 注意 © 1999-2012 Microsoft Corporation.保留所有权利. Microsoft.Windows.Visual Basic.Visual C# ...

  7. linux中的守护进程

    概念Daemon(精灵)进程,是Linux中的后台服务进程,生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.模型守护进程编程步骤1. 创建子进程,父进程退出所有工 ...

  8. Excel教程(6) - 外部函数

    EUROCONVERT 用途:将数字转换为欧元形式,将数字由欧元形式转换为 欧盟成员国货币形式,或利用欧元作为中间货币将数字由某一 欧盟成员国货币转化为另一欧盟成员国货币的形式(三角转换 关系). 语 ...

  9. 2016NEFU集训第n+3场 E - New Reform

    Description Berland has n cities connected by m bidirectional roads. No road connects a city to itse ...

  10. SqlParameter关于Like的传参数无效问题

    正确的写法(简洁版) private void GetHandleData(string strKeyWord1, string strKeyWord2, string strKeyWord3) { ...