Pergunta

Estou iniciando a implantação do meu aplicativo da web e preciso garantir que todos os conjuntos que serão implantados foram criados usando a configuração de liberação. Nosso sistema foi desenvolvido usando C#/. NET 3.5.

Existe alguma maneira de conseguir isso?

Foi útil?

Solução

Verificar isto. A idéia é que você obtenha a lista de atributos de montagem usando Assembly.GetCustomAttributes() e procurar DebuggableAttribute e então encontre se esse atributo tem IsJITTrackingEnabled conjunto de propriedades.

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

Outras dicas

Eu amei isso David sugestão, mas você também pode seguir por esse caminho (AssemblyInfo.cs):

#if DEBUG
[assembly: AssemblyDescription("Your application assembly (DEBUG version)")]
#else if RELEASE
[assembly: AssemblyDescription("Your application assembly (RELEASE version)")]
#endif

Isso é mais amigável ao humano, como qualquer um pode clicar com o botão direito do mouse, para selecionar Properties e vai para Details aba.

Se for a sua montagem, acredito usar o AssemblyConfiguration atributo é a melhor abordagem. Ele está documentado como "especifica a configuração de construção, como varejo ou depuração, para uma assembléia".

Dependendo das suas configurações de construção, você pode ter código assim:

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

Em seguida, verifique o atributo de montagem:

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;
}

(Eu sei que R. Schreurs Comentário no Rubens Farias diz o mesmo, mas encontrei essas informações em outro lugar antes de ver o comentário, então acredito que isso requer uma entrada mais importante como uma resposta completa em vez de um comentário)

Se você tiver o refletor instalado, também poderá clicar na montagem e procurar o atributo degível ([Assembléia: depurável ()]) no painel Desmokebler.

Assumindo apenas a configuração de depuração e liberação, o símbolo de depuração é, por padrão, definido com a configuração de depuração; portanto, o código abaixo no AssemblyInfo.cs (na pasta Properties).

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

Eu uso o AssemblyTitle Over AssemblyDescription, pois ele aparecerá nas minhas propriedades do Windows 7 File Explorer:

DLL File properties

Para aqueles que gostam da resposta de David e Stevieg, aqui está um script Linqpad escrito em C#. Para usar o script, você precisa baixar Linqpad 5 e verifique se o programa C# está selecionado conforme mostrado na captura de tela abaixo.

Basta substituir DLL_Folder_Path para apontar para a pasta que contém as DLLs a serem inspecionadas.

// TODO - Specify your folder containing DLLs to inspect
static string DLL_FOLDER_PATH = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0";
void Main()
{
    (from dllPath in Directory.GetFiles(DLL_FOLDER_PATH, "*.dll")
    let assembly = dllPath.SafeLoad()
    let build = assembly == null ? "Error" : (dllPath.SafeLoad().IsAssemblyDebugBuild() ? "Debug" : "Release")
    select new {
        Assembly_Path = dllPath,
        Build = build,
    }).Dump();
}
static class Extensions {
    public static bool IsAssemblyDebugBuild(this Assembly assembly)
    {
        return assembly.GetCustomAttributes(false).OfType<DebuggableAttribute>().Select(da => da.IsJITTrackingEnabled).FirstOrDefault();
    }
    public static Assembly SafeLoad(this string path){
        try{
            return Assembly.LoadFrom(path);
        }
        catch {
            return null;
        }
    }
}

Checking release or debug build using LINQPad5

Linqpad 5 pode ser baixado aqui.

Não implante na produção via Visual Studio. Investigar Integração contínua e construções com script (como com Nant, ou talvez algo mais legível como FALSO).

A chave F5 não é um processo de construção

Para detratores que acreditam que isso não responde à pergunta, o OP escreveu:

... Preciso garantir que todos os conjuntos que serão implantados foram criados usando a configuração de liberação.

Para garantia isso, use um servidor de construção, como Teamcity e possivelmente uma ferramenta de gerenciamento de liberação como Octopus implantar. Bloqueie seus sistemas de produção para que os desenvolvedores façam o processo oficial de construção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top