如何使用Debug或Release配置检查程序集是否已构建?

bor*_*ula 42 c# build-process assemblies release-mode debug-mode

我正在开始部署我的Web应用程序,我需要保证所有要部署的程序集都是使用Release配置构建的.我们的系统是使用C#/.Net 3.5开发的.

有没有办法实现这个目标?

Dav*_*vid 39

检查一下.我们的想法是使用Assembly.GetCustomAttributes()和搜索汇编属性列表,DebuggableAttribute然后查找此属性是否具有IsJITTrackingEnabled属性集.

    public bool IsAssemblyDebugBuild(Assembly assembly)
    {
        return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Any(da => da.IsJITTrackingEnabled);
    }
Run Code Online (Sandbox Code Playgroud)

  • 讽刺并不是真的需要.通常,搜索互联网最困难的部分是知道要问什么. (14认同)
  • 仅供参考,该链接现已破裂 (2认同)

Rub*_*ias 27

我喜欢大卫的建议,但你也可以这样走(AssemblyInfo.cs):

#if DEBUG
[assembly: AssemblyDescription("Your application assembly (DEBUG version)")]
#else if RELEASE
[assembly: AssemblyDescription("Your application assembly (RELEASE version)")]
#endif
Run Code Online (Sandbox Code Playgroud)

这更加人性化,因为任何人都可以右键单击该程序集,选择Properties并转到Details选项卡.

  • 我建议使用AssemblyConfiguration而不是AssemblyDescription.AssemblyConfiguration记录为"指定程序集的构建配置,例如零售或调试". (8认同)
  • +1:这实际上是这个汇编指令背后的目的. (2认同)

Gui*_*ino 7

如果它是你的程序集,我相信使用AssemblyConfiguration属性是最好的方法.它被记录为"指定程序集的构建配置,例如零售或调试".

根据您的构建配置,您可能具有以下代码:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
Run Code Online (Sandbox Code Playgroud)

然后检查程序集属性:

public static bool IsAssemblyConfiguration(Assembly assembly, string configuration)
{
    var attributes = assembly.GetCustomAttributes(typeof(AssemblyConfigurationAttribute), false);
    if (attributes.Length == 1)
    {
        var assemblyConfiguration = attributes[0] as AssemblyConfigurationAttribute;
        if (assemblyConfiguration != null)
        {
            return assemblyConfiguration.Configuration.Equals(configuration, StringComparison.InvariantCultureIgnoreCase);
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

(我知道R. Schreurs对Rubens Farias的评论也是如此,但我在看到评论之前在其他地方找到了这些信息,所以我认为这需要一个更重要的条目,如完整的回复,而不是评论)