Existe um símbolo “pré-processador” correspondente à bandeira / inseguro?
-
11-09-2019 - |
Pergunta
Eu estou lidando com um WriteableBitmap
em C #. Atualmente estou usando um bloco de código inseguro para acessar diretamente os pixels via WriteableBitmap.BackBuffer
. Eu prefiro não depender da opção /unsafe
, no entanto, assim que eu estou pensando em usar WriteableBitmap.WritePixels
vez.
Existe alguma maneira de condicionalmente compilação na versão "inseguro" de tal forma que ele pode ser usado quando se utilizou a opção / inseguro para compilação, sem a necessidade de integração manual no meu arquivo de projeto?
Em suma, eu estou procurando algo ao longo das linhas de:
#if UNSAFE
//my unsafe version
#else
//the supposedly safe version goes here
#endif
Detecção em tempo de execução é muito agradável; Mas isso significa que eu sempre precisam para compilar com /unsafe
, e que significa que o código biblioteca exigiria atualizações do arquivo de projeto, que é menos útil.
Basicamente, eu quero manter a versão rápida para quando importa, mas tem uma versão razoável que apenas funciona, não importa o quê.
Solução
Eu recomendo que você crie uma ou mais novas configurações usando o gerenciador de configuração, diga "Unsafe Debug" e "inseguro Release", que tem as opções existentes mais verificar inseguro e adicionar um símbolo condicional de inseguro. Em vez de alternar as opções inseguros você usaria a configuração inseguro.
Você também pode ter as configurações de mudar o nome do conjunto inseguro saída para que você teria dois conjuntos, dizem Bitmaps.dll e Bitmaps.Unsafe.dll, e um cliente do conjunto pode decidir qual se encaixa às suas necessidades melhores especificando que a montagem faz referência.
Outras dicas
Eu sugiro que você compilar com /unsafe /define:SAFE
. Talvez haja outra maneira eu não estou ciente de.
Eu acho que você pode tentar este código
#define UNSAFE
#undef UNSAFE // comment this line out if you want to compile the save version
Em seguida, você pode usar o código como se deu no seu exemplo.