Como devo escrever o código com seções exclusivas para diferentes versões do .NET

StackOverflow https://stackoverflow.com/questions/85773

  •  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?

Foi útil?

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.

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