Existe uma maneira de atribuir métodos condicionais ou adicionar directivas preprosessor em tempo de execução em C #?
-
03-07-2019 - |
Pergunta
O objetivo é ser capaz de transferir as chamadas de depuração em em tempo de execução do banco de dados em uma compilação de produção ...
Solução
Não; o ponto de métodos condicionais e directivas de pré-processamento é que eles causam o compilador código omitir da executável final. O equivalente de tempo de execução delas é uma declaração if
.
No entanto, programação é aproximadamente equivalente ao que você está pedindo, na medida em que permite injetar código em um programa em execução que não seriam lá orientada a aspectos.
Editar:. como Joe mencionado, a maneira de fazer isso é para programa contra uma estrutura de log como log4net que permite o controle de grão fino sobre o que é registrado
Outras dicas
Não no nível pré-processador. Afinal, você está correndo o resultado desse processo. Claro, você pode mudar seus cheques pré-processador para ser código verifica normais, que podem obviamente ser comutadas conforme necessário.
Não, mas a maioria dos subsistemas de registro fornecer essa capacidade. Por exemplo. com log4net pode alterar o nível de registo de forma dinâmica, ou se estiver usando System.Diagnostics.Trace você pode alterar o TraceSwitch nível dinamicamente.
Você, obviamente, não pode afetar o código binário como tal (como com a declaração # if).
O que eu costumo fazer é ter certeza de que meu código contém uma grande quantidade de logging, que é ativado por trace muda . Dessa forma, você pode ter um sistema de execução em produção com pouco ou nenhum registro, e quando você quer pesquisar algum problema você pode alternar o log on, alterando o arquivo de configuração.