Pregunta

Estoy tratando con un WriteableBitmap en C #. Actualmente estoy usando un bloque de código no seguro para acceder directamente a través de los píxeles WriteableBitmap.BackBuffer. Yo prefiero no dependen de la opción /unsafe, sin embargo, por lo que estoy considerando usar WriteableBitmap.WritePixels lugar.

¿Hay alguna manera de compilar condicionalmente en la versión "inseguro" de tal manera que se puede utilizar cuando se utiliza la opción / inseguro para la compilación, sin que se requiera la integración manual en mi archivo de proyecto?

En resumen estoy buscando algo en la línea de:

#if UNSAFE
   //my unsafe version
#else
   //the supposedly safe version goes here
#endif

Detección en tiempo de ejecución es muy bonita; pero eso significa que siempre hay que compilar por /unsafe, y eso significa que el código de la biblioteca requeriría actualizaciones de archivos de proyecto, que es menos práctico.

Básicamente, quiero seguir la versión rápida para cuando importa, pero tienen una versión razonable de que simplemente funciona no importa qué.

¿Fue útil?

Solución

Te recomiendo que crear uno o más nuevas configuraciones utilizando el gestor de configuración, por ejemplo "inseguro de depuración" y "Release inseguro", que tienen las opciones existentes más verifican en condiciones de riesgo y añaden un símbolo condicional de SEGURO. En lugar de alternar las opciones inseguras que utilizaría la configuración insegura.

También podría tener las configuraciones de cambiar el nombre de salida del conjunto insegura por lo que tendría dos asambleas, dicen Bitmaps.dll y Bitmaps.Unsafe.dll, y un cliente de la asamblea puede decidir que se ajusta a sus necesidades mejor especificando cuyo conjunto que hace referencia.

Otros consejos

Yo sugeriría que se compila con /unsafe /define:SAFE. Tal vez hay otra manera que no soy consciente de.

Creo que se puede tratar este código

#define UNSAFE
#undef UNSAFE // comment this line out if you want to compile the save version

A continuación, puede utilizar el código como usted dio en su ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top