背景:T4テキストテンプレート - ホストからコンパイルシンボルを取得できますか?
は、私は非常に私は最近、Windowsの携帯電話にライブラリを移植してきたなど、安全でないコード、ポインタ演算を使用して、パフォーマンスのために調整されたC#で書かれたオープンソースのゲームライブラリを持っています。残念ながら、Windowsの携帯電話は、すべての危険なコードをサポートしていないので、私はトイレにこのようなプリプロセッサディレクティブと私のソースコードを持っていた:
#if WINDOWS || XBOX
public unsafe struct Foo
#elif WINDOWS_PHONE
public struct Foo
#endif
ためのコードベースはかなり読めないとすることは困難になってきたこれらのディレクティブの量を私は他のオプションを探求してきました。そのうちの1つは、T4を使ったテキストテンプレートです。
質問:テキストテンプレート内からコンパイルシンボルを取得することが可能になる天気をか
私はT4ルートダウンあまりにも遠くに行く前に知っておく必要がある何がありますか?私はテンプレートのパラメータを調べましたが、外部から変更するのは非常に簡単ではありませんでした。これが可能である天気を上かどうか、誰もがいくつかの光を当てることができれば、私は感謝されると思います
<# if (Host.CompilationSymbols.Contains("WINDOWS_PHONE") { #>
public struct Foo
<# { #>
:理想的には私が見たいものをビット、このようなものです!
好奇心 - T4を使用して安全でない宣言属性を削除すると仮定すると、実際の安全でないコードはどうなりますか? – tgiphil
明らかに、テンプレートが物事を変える場所だけではありません - 他の例はref Foo barへのFoo * barの変更、bar-> foo()へのbar.foo()の変更 – MattDavey