• 如何判断Assembly是Debug还是Release?


    在拿到一个Assembly文件(.dll、.exe)的时候,如何才能迅速判断这个文件是使用Debug模式还是Release模式编译出来的呢?

    在项目的AssemblyInfo.cs文件中,使用这样一个技巧:

    #if DEBUG
    [assembly: AssemblyDescription("Debug")]
    #else
    [assembly: AssemblyDescription("Release")]
    #endif


    编译出来Assembly文件以后,只要直接察看文件的属性,就可以看出来了:



    如果要在程序中取得这个信息,可以使用:

    Object[] attrs = System.Reflection.Assembly.GetExecutingAssembly().
        GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
    if (attrs.Length > 0)
    {
        String sCompMode = (attrs[0] as AssemblyDescriptionAttribute).Description;
    }


    来得到这个信息。

    Source : http://weblogs.asp.net/tgraham/archive/2004/06/16/157545.aspx

    补充:Lostinet说出可以使用“System.Diagnostics.DebuggableAttribute”这个Attribute来判断一个Assembly是否是Debug模式编译的。但是,在这里C# 1.1编译器有一个“Bug”:

    不管当前的Assembly是否是Debug模式编译的,C# 1.1的编译器csc.exe都会给Assembly加上“System.Diagnostics.DebuggableAttribute”,而指定“/optimize”参数时,csc.exe才不加。就是说,我们即使不启用Debug来进行编译:

    “csc some.cs /debug-”,也会给编译出来的Assembly加上DebuggableAttribute;

    “csc some.cs /debug- /optimize”,这样才不会加上DebuggableAttribute。

    但是,幸运的是,VS.NET开发环境只要是Release模式编译,都会自动给csc.exe加上“/optimize”参数,所以...从这点上来讲,只要Assembly是在VS.NET里面编译的,这个方法还是有效的。
  • 相关阅读:
    工作中常用的工具
    lua 调试、热重载
    Lua库收集
    Mac常见端口
    Swift 学习笔记1
    项目-微博(模仿新浪微博)
    iOS多线程
    iOSCoreData介绍
    iOS数据库操作流程
    iOS中数据库运用之前的准备-简单的数据库
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436787.html
Copyright © 2020-2023  润新知