Como devo escrever o código com seções exclusivas para diferentes versões do .NET
-
01-07-2019 - |
Pergunta
As minhas necessidades de código fonte para apoiar tanto a versão .NET 1.1 e 2.0 ... como faço para testar para as diferentes versões e qual é a melhor maneira de lidar com esta situação.
Eu estou querendo saber se eu deveria ter as duas seções de linha de código, em classes separadas, métodos etc. O que você acha?
Solução
Se você quer fazer algo como isso, você vai precisar usar pré-processador comandos e condicional compilação símbolos.
Gostaria de usar símbolos que indicam claramente a versão do .NET lhe são dirigidas (dizem NET11 e NET20) e em seguida, enrole o código relevante como esta:
#if NET11
// .NET 1.1 code
#elif NET20
// .NET 2.0 code
#endif
A razão para fazê-lo desta forma, em vez de um simples if / else é uma camada extra de proteção no caso de alguém se esquece de definir o símbolo.
Dito isto, você realmente deve detalhar o coração da razão pela qual você quer / necessidade de fazer isso.
Outras dicas
Há uma série de opções diferentes aqui. Onde eu trabalho usamos #if pragmas mas também pode ser feito com conjuntos separados para as versões separadas.
O ideal seria, pelo menos, manter o código dependente da versão em arquivos de classe parcial separados e fazer a versão correta disponível em tempo de compilação. Gostaria de fazer cumprir esta se eu pudesse voltar no tempo, a nossa base de código agora tem um monte de pragmas #if e às vezes pode ser difícil de gerir. A pior parte da coisa toda #if pragma é que Visual Studio simplesmente ignora qualquer coisa que não irá compilar com as define atuais e por isso é muito fácil de verificar em quebrar alterações.
NUnit suporta 1.1 e 2.0 e por isso é uma boa escolha para um quadro de teste. Não é muito difícil de usar algo como NAnt para fazer separada 1.1 e 2.0 cria e, em seguida, automaticamente executar os testes NUnit .
eu estaria fazendo a pergunta de por que você tem que manter duas bases de código, eu iria escolher um e ir com ele se há alguma chance de ele.
Tentando manter duas bases de código em sincronia com o número de alterações e tipos de mudanças seriam muito complexo, e um processo de compilação para compilação para uma ou outra versão seria muito complexo.
Nós tivemos esse problema e acabamos com uma "camada de compatibilidade", onde foi implementado um único conjunto de interfaces e código de utilidade para .NET v1.1 e v2.0.
Então, o nosso instalador previsto o código adequado para a versão correta. Usamos NSIS (grátis!), E eles têm funções que você pode chamar para determinar a versão .NET.