【发布时间】:2010-12-31 13:01:25
【问题描述】:
背景:
我有一个用 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
<# { #>
如果有人能说明这是否可能,我将不胜感激!
【问题讨论】:
-
好奇 - 假设您使用 T4 删除不安全声明属性,您如何处理实际的不安全代码?
-
显然它不是 only 模板会改变事物的地方 - 其他示例是 Foo* bar 更改为 ref Foo bar,或 bar->foo() 更改为bar.foo()
标签: .net visual-studio-2010 t4