Geçmiş:T4 Metin Şablonu - Ev sahibinden derleme sembolleri almak mümkün mü?
ederim Geçenlerde Windows Phone için kütüphane taşımış olabilirsiniz vb güvensiz kod, işaretçi aritmetiği kullanılarak performans için ayarlanmış C# ile yazılmış bir açık kaynak oyun kütüphanesi var. Maalesef Windows Phone tüm güvenli kodunu desteklemez, bu yüzden çöp için bu gibi önişlemci direktifleri ile benim kaynak kodunu vardı:
#if WINDOWS || XBOX
public unsafe struct Foo
#elif WINDOWS_PHONE
public struct Foo
#endif
nedeniyle kod temeli oldukça okunmaz ve zor hale gelmiştir bu direktiflerin miktarına korumak, bu yüzden diğer seçenekleri araştırıyordum - biri T4 kullanarak metin şablonları.
Soru:
Ne T4 rota Hava aşağı çok uzakta gitmeden önce bilmeniz gereken ya da olmasın bir metin şablonundan içinden derleme sembollerini almak mümkündür? Şablon parametrelerini inceledim ama onları dış dünyadan değiştirmek çok kolay değildi. İdeal ne görmek istiyorum biraz böyle bir şey olur: herkes Hava biraz ışık tutmak olabilir ya da değil bu mümkün
<# if (Host.CompilationSymbols.Contains("WINDOWS_PHONE") { #>
public struct Foo
<# { #>
Eğer memnun olurum!
Meraklı - T4 kullanarak güvenli olmayan bildirim özelliğini kaldırmayı kabul ederseniz, gerçek güvenli olmayan kodla ne yaparsınız? – tgiphil
Açıkçası, şablonun işleri değiştirebileceği * tek * yer değil - diğer örnekler Foo * bar foo çubuğuna dönüşür veya bar-> foo() bar.foo() olarak değişir – MattDavey