Текстовый шаблон T4 - Можно ли получить символы компиляции с хоста?

Предыстория:

У меня есть игровая библиотека с открытым исходным кодом, написанная на C #, которая хорошо настроена по производительности, с использованием небезопасного кода, арифметики указателей и т. Д. Недавно я перенес библиотеку на Windows Phone. К сожалению, Windows Phone вообще не поддерживает небезопасный код, поэтому мне пришлось засорять свой исходный код директивами препроцессора, такими как:

#if WINDOWS || XBOX
public unsafe struct Foo
#elif WINDOWS_PHONE
public struct Foo
#endif

Из-за количества этих директив кодовая база стала нечитаемой и сложной в обслуживании, поэтому я Я изучаю другие варианты - один из них - текстовые шаблоны с использованием T4.

Вопрос:

Что мне нужно знать, прежде чем заходить слишком далеко по маршруту T4, можно ли получить символы компиляции из в текстовом шаблоне? Я изучил параметры шаблона, но изменить их из внешнего мира оказалось непросто. В идеале я бы хотел увидеть что-то вроде этого:

<# if (Host.CompilationSymbols.Contains("WINDOWS_PHONE") { #>
public struct Foo
<# { #>

Если бы кто-нибудь мог пролить свет на то, возможно это или нет, я был бы благодарен!

6
задан MattDavey 28 December 2010 в 19:23
поделиться