Pergunta

Existem símbolos de pré-processamento que permitem algo como

#if CLR_AT_LEAST_3.5
// use ReaderWriterLockSlim
#else
// use ReaderWriterLock
#endif

ou alguma outra maneira de fazer isso?

Foi útil?

Solução

Eu não acho que existem quaisquer símbolos predefinido 'pré-processamento'. No entanto, você pode conseguir o que você quer assim:

  1. Criar configurações diferentes do seu projeto, uma para cada versão do CLR que você quer apoio.

  2. Escolha um símbolo como VERSION2, VERSION3 etc. versão per CLR.

  3. Em cada configuração, defina o símbolo associado com ele e undefine todos os outros.

  4. Use estes símbolos em blocos de compilação condicional.

Outras dicas

Não há qualquer embutido, mas você pode fornecer o seu próprio.

Para este cenário específico, você pode querer encapsular a lógica em (por exemplo) um invólucro (bloqueio) de classe, de modo que você não tem #if espalhadas por todo o código; Claro, se você está apenas fazendo um pouco de bloqueio pode não valer a pena.

Eu uso diferentes configurações e / ou projetos de construção para uma variedade de plataformas - ou seja, protobuf- líquido constrói para .NET 2.0, 3.0 .NET, mono, CF 2,0, 3,5 CF usando este truque. O código tem blocos #if com base em diferentes símbolos para a lógica de controlo - para que, por exemplo, BinaryFormatter não está disponível em CF, WCF só está disponível com .NET 3.0, Delegate.CreateDelegate não é em CF 2.0, etc

.

Você pode usar o reflexo para verificar dinamicamente se um certo tipo como ReaderWriterLockSlim está disponível (em vez de usar o pré-processador).

Isto lhe daria a vantagem de que você pode implantar uma única versão de seu produto e usuários que têm (ou atualizar a) .NET 3.5 irá beneficiar o código otimizado.

Você pode configurar manualmente este símbolo usando o / definir compilador interruptor . Em seguida, você criar diferentes configurações de compilação para cada versão clr desejado.

Se isso é tudo o que você precisava fazer, eu suponho que você poderia uso Environment.Version, mas como solução do divo, parece deixar um monte de código desnecessária lá.

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