Hintergrund:T4-Textvorlage - Ist es möglich, Kompilierungssymbole vom Host zu erhalten?
Ich habe ein offenes Spiel Bibliothek Quelle in C# geschrieben, die sehr für die Leistung abgestimmt ist, unsicheren Code verwenden, Pointer-Arithmetik usw. habe ich vor kurzem die Bibliothek zu Windows Phone portiert. Leider hat Windows Phone nicht unsicheren Code unterstützen überhaupt, so habe ich zu Wurf meine Quellcode mit Präprozessordirektiven wie dies hatte:
#if WINDOWS || XBOX
public unsafe struct Foo
#elif WINDOWS_PHONE
public struct Foo
#endif
Aufgrund der Menge dieser Richtlinien die Code-Basis geworden ist ziemlich unleserlich und schwer zu pflegen, also habe ich andere Optionen untersucht - eine davon ist Textvorlagen mit T4.
Die Frage:
Was muss ich zu weit wissen, bevor sie nach unten die T4 Route, ob ist oder nicht, ist es möglich, Zusammenstellung Symbole aus einer Textvorlage zu bekommen? Ich habe mir Template-Parameter angesehen, aber es schien nicht so einfach zu sein, sie von der Außenwelt abzuändern. Im Idealfall ist ein bisschen wie das ist etwas, was ich gerne sehen würde:
<# if (Host.CompilationSymbols.Contains("WINDOWS_PHONE") { #>
public struct Foo
<# { #>
Wenn jemand etwas Licht auf, ob vergießen konnte oder nicht, das ist möglich, ich wäre dankbar!
Neugierig - vorausgesetzt, Sie entfernen das unsichere Deklarationsattribut mit T4, was machen Sie mit dem tatsächlichen unsicheren Code? – tgiphil
Offensichtlich ist es nicht der * einzige * Ort, an dem die Vorlage die Dinge verändern würde - andere Beispiele wären Foo * Bar ändert sich in ref Foo bar oder bar-> foo() ändert sich in bar.foo() – MattDavey