none
怎么样知道一个档案是Debug还是Release编译的? RRS feed

答案

  • 其实代码里也可以直接写

    Code Snippet

    private void button3_Click(object sender, EventArgs e)}

    {           

    #if DEBUG

         MessageBox.Show("DEBUG");

    #else

        MessageBox.Show("Release");

    #endif


    使用这种方法的前提必须是:
    在项目属性-生成里面必须设置了 定义 DEBUG 常量,否则,需要使用在Assembly.cs里事先定义,然后在程序中读取。
    就是我上面的方法
    2008年9月10日 0:06
    版主
  • Doug提供了一个c#编写的工具来甄别一个assembly是否为Debug的build模式
    其原理是 通过DebuggableAttribute 的 IsJITTrackingEnabled 属性来确定

    下载全部源码:http://msmvps.com/blogs/cdistilled/archive/2006/06/20/102446.aspx

    其核心代码如下:

        /// <summary>
        /// C# program to determine if an assembly was compiled with debugging information or not.
        /// </summary>
        public class Program
        {
            #region private static void Main(string[] args)

            /// <summary>
            /// Program entry point.
            /// </summary>
            /// <param name="args">The command line arguments.</param>
            private static void Main(string[] args)
            {
                if (args.Length != 1)
                {
                    Console.WriteLine("Usage: DebugBuild <filename>");
                }
                else if (!File.Exists(args[0]))
                {
                    Console.WriteLine(args[0] + " not found.");
                }
                else if (DebugBuild(args[0]))
                {
                    Console.WriteLine("Debug Build");
                }
                else
                {
                    Console.WriteLine("Release Build");
                }
            }

            #endregion

            #region private static bool DebugBuild(string path)

            /// <summary>
            /// Gets a <see cref="TTongue Tiedystem.Boolean"/> value indicating whether the assembly was compiled in debug mode.
            /// </summary>
            /// <param name="path">The path to the assembly for which compilation mode should be determined.</param>
            /// <returns><c>true</c> if, and only if, the assembly was compiled in debug mode. <c>false</c> otherwise.</returns>
            private static bool DebugBuild(string path)
            {
                return DebugBuild(Assembly.LoadFile(Path.GetFullPath(path)));
            }

            #endregion

            #region private static bool DebugBuild(Assembly assembly)

            /// <summary>
            /// Gets a <see cref="TTongue Tiedystem.Boolean"/> value indicating whether the assembly was compiled in debug mode.
            /// </summary>
            /// <param name="assembly">The assembly for which compilation mode should be determined.</param>
            /// <returns><c>true</c> if, and only if, the assembly was compiled in debug mode. <c>false</c> otherwise.</returns>
            private static bool DebugBuild(Assembly assembly)
            {
                foreach (object attribute in assembly.GetCustomAttributes(false))
                {
                    if (attribute is DebuggableAttribute)
                    {
                        DebuggableAttribute _attribute = attribute as DebuggableAttribute;

                        return _attribute.IsJITTrackingEnabled;
                    }
                }

                return false;
            }

            #endregion
        }
    2008年9月11日 0:44

全部回复

  • 你可以在

     AssemblyInfo.cs:

     

    Code Snippet
    #if DEBUG
    [assembly: AssemblyConfiguration("Debug build")]
    #else
    [assembly: AssemblyConfiguration("Release build")]
    #endif
     
    or
    在程序中
    #IFDEBUG
    #ENDIF
    2008年9月9日 14:38
    版主
  • 这个应该可以,但我还是不知道在程序中怎么才能判断出来,代码要怎么写

    2008年9月9日 15:32
  • Code Snippet

    这样:
    首先在 AssemblyInfo.cs 里设置

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





    在你的程序里:
    加一个方法:

            private string GetCustomAttributes()
            {
                string functionReturnValue = null;
                System.Reflection.Assembly assemb = System.Reflection.Assembly.GetExecutingAssembly();
                foreach (System.Attribute attr in assemb.GetCustomAttributes(false))
                {
                    if (attr is System.Reflection.AssemblyConfigurationAttribute)
                    {
                        functionReturnValue += "AssemblyConfigurationAttribute >>>>> " + ((System.Reflection.AssemblyConfigurationAttribute)attr).Configuration.ToString() + "<br />";
                    }
                }
                return functionReturnValue;
            }



    调用:

            private void button2_Click(object sender, EventArgs e)
            {

                string a = GetCustomAttributes();
                MessageBox.Show(a);
            }

    2008年9月9日 23:25
    版主
  • 其实代码里也可以直接写

    Code Snippet

    private void button3_Click(object sender, EventArgs e)}

    {           

    #if DEBUG

         MessageBox.Show("DEBUG");

    #else

        MessageBox.Show("Release");

    #endif


    使用这种方法的前提必须是:
    在项目属性-生成里面必须设置了 定义 DEBUG 常量,否则,需要使用在Assembly.cs里事先定义,然后在程序中读取。
    就是我上面的方法
    2008年9月10日 0:06
    版主
  • 孟老师的方法很不错,我觉得第二个方法更简便些。
    2008年9月10日 1:16
    版主
  • Doug提供了一个c#编写的工具来甄别一个assembly是否为Debug的build模式
    其原理是 通过DebuggableAttribute 的 IsJITTrackingEnabled 属性来确定

    下载全部源码:http://msmvps.com/blogs/cdistilled/archive/2006/06/20/102446.aspx

    其核心代码如下:

        /// <summary>
        /// C# program to determine if an assembly was compiled with debugging information or not.
        /// </summary>
        public class Program
        {
            #region private static void Main(string[] args)

            /// <summary>
            /// Program entry point.
            /// </summary>
            /// <param name="args">The command line arguments.</param>
            private static void Main(string[] args)
            {
                if (args.Length != 1)
                {
                    Console.WriteLine("Usage: DebugBuild <filename>");
                }
                else if (!File.Exists(args[0]))
                {
                    Console.WriteLine(args[0] + " not found.");
                }
                else if (DebugBuild(args[0]))
                {
                    Console.WriteLine("Debug Build");
                }
                else
                {
                    Console.WriteLine("Release Build");
                }
            }

            #endregion

            #region private static bool DebugBuild(string path)

            /// <summary>
            /// Gets a <see cref="TTongue Tiedystem.Boolean"/> value indicating whether the assembly was compiled in debug mode.
            /// </summary>
            /// <param name="path">The path to the assembly for which compilation mode should be determined.</param>
            /// <returns><c>true</c> if, and only if, the assembly was compiled in debug mode. <c>false</c> otherwise.</returns>
            private static bool DebugBuild(string path)
            {
                return DebugBuild(Assembly.LoadFile(Path.GetFullPath(path)));
            }

            #endregion

            #region private static bool DebugBuild(Assembly assembly)

            /// <summary>
            /// Gets a <see cref="TTongue Tiedystem.Boolean"/> value indicating whether the assembly was compiled in debug mode.
            /// </summary>
            /// <param name="assembly">The assembly for which compilation mode should be determined.</param>
            /// <returns><c>true</c> if, and only if, the assembly was compiled in debug mode. <c>false</c> otherwise.</returns>
            private static bool DebugBuild(Assembly assembly)
            {
                foreach (object attribute in assembly.GetCustomAttributes(false))
                {
                    if (attribute is DebuggableAttribute)
                    {
                        DebuggableAttribute _attribute = attribute as DebuggableAttribute;

                        return _attribute.IsJITTrackingEnabled;
                    }
                }

                return false;
            }

            #endregion
        }
    2008年9月11日 0:44