Antecedentes:Plantilla de texto T4: ¿es posible obtener símbolos de compilación del host?
Tengo una biblioteca de juegos de código abierto escrito en C#, que es muy afinado para el rendimiento, utilizando código no seguro, la aritmética de punteros, etc. Yo he portado recientemente a la biblioteca para Windows Phone. Desafortunadamente Windows Phone no es compatible con código no seguro en absoluto, así que he tenido que camada mi código fuente con las directivas del preprocesador como este:
#if WINDOWS || XBOX
public unsafe struct Foo
#elif WINDOWS_PHONE
public struct Foo
#endif
Debido a la cantidad de estas directivas el código base se ha vuelto bastante ilegibles y difíciles de mantener, así que he estado explorando otras opciones, una de las cuales son las plantillas de texto que usan T4.
La Pregunta:
Lo que necesito saber antes de ir demasiado lejos por el camino de la T4 es tiempo o no es posible obtener símbolos de compilación desde el interior de una plantilla de texto? He analizado los parámetros de la plantilla, pero no parecía muy fácil modificarlos desde el exterior. Lo ideal sería que lo que me gustaría ver es algo un poco como esto:
<# if (Host.CompilationSymbols.Contains("WINDOWS_PHONE") { #>
public struct Foo
<# { #>
Si alguien puede arrojar algo de luz sobre este tiempo o no es posible te agradecería!
Curioso: suponiendo que elimina el atributo de declaración insegura utilizando T4, ¿qué hace con el código inseguro real? – tgiphil
Obviamente, no es el * único * lugar donde la plantilla alteraría las cosas; otros ejemplos serían los cambios en la barra Foo * para ref la barra Foo, o bar-> foo() cambia a bar.foo() – MattDavey