6

我正在使用 VS2010/2012,我想知道是否有办法(可能使用反射)来查看程序集是如何构建的。

当我在 Debug 中运行时,我使用 将#if DEBUG调试信息写入控制台。

但是,当您最终得到一堆程序集时,有没有办法查看它们是如何构建的?获取版本号很容易,但我无法找到如何检查构建类型。

4

2 回答 2

3

一旦它们被编译,你就不能,除非你自己放置元数据。

例如,您可以使用AssemblyConfigurationAttribute.NET 4.5 或AssemblyMetadataAttribute

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

或者

#if DEBUG
[assembly: AssemblyMetadata("DefinedVariable", "DEBUG")]
#endif
于 2013-03-04T10:39:59.757 回答
3

有3种方式:

private bool IsAssemblyDebugBuild(string filepath)
{
    return IsAssemblyDebugBuild(Assembly.LoadFile(Path.GetFullPath(filepath)));
}

private bool IsAssemblyDebugBuild(Assembly assembly)
{
    foreach (var attribute in assembly.GetCustomAttributes(false))
    {
        var debuggableAttribute = attribute as DebuggableAttribute;
        if(debuggableAttribute != null)
        {
            return debuggableAttribute.IsJITTrackingEnabled;
        }
    }
    return false;
}

或使用 assemblyinfo 元数据:

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

#if DEBUG或者在代码中使用常量

#if DEBUG
        public const bool IsDebug = true;
#else
        public const bool IsDebug = false;
#endif

我更喜欢第二种方式,所以我可以通过代码和 Windows 资源管理器来阅读它

于 2013-03-04T10:48:13.860 回答