我正在使用T4模板(除其他外)在AssemblyInfo.cs文件中增加构建号.
因为我只希望在运行Release版本时进行转换,所以我之前通过将T4文件上的构建操作设置为"None"并在项目上具有预构建命令的kludge来完成此操作:
if $(Configuration) == Release "%CommonProgramFiles(x86)%\microsoft shared\TextTemplating\12.0\TextTransform.exe" -a !!build!true "$(ProjectDir)Transforms\AssemblyInfo.tt"
Run Code Online (Sandbox Code Playgroud)
我现在正在转向VS2017,我想知道是否有更好的方法来做到这一点.像Get Visual Studio这样的问题的答案在每个构建上运行T4模板基本上提供:
在2017年,VS2017有更好的方法来实现我的目标吗?有些东西允许我只在发布版本上运行我的T4,它从IDE集成到解决方案中而不依赖于批处理文件?
另一个问题在运行T4模板时确定解决方案配置(调试/发布)显示了如何从T4模板中获取构建类型,但到那时对我来说已经太晚了.
背景:
我有一个用C#编写的开源游戏库,它使用不安全的代码,指针算法等高度优化性能.我最近将该库移植到了Windows Phone.不幸的是,Windows Phone根本不支持不安全的代码,所以我不得不使用预处理器指令来丢弃我的源代码,例如:
#if WINDOWS || XBOX
public unsafe struct Foo
#elif WINDOWS_PHONE
public struct Foo
#endif
Run Code Online (Sandbox Code Playgroud)
由于这些指令的数量,代码库变得非常难以理解并且难以维护,所以我一直在探索其他选项 - 其中一个是使用T4的文本模板.
问题:
在走向T4路线太远之前我需要知道的是,是否可以从文本模板中获取编译符号?我已经查看了模板参数,但从外部世界修改它们似乎并不容易.理想情况下,我希望看到的有点像这样:
<# if (Host.CompilationSymbols.Contains("WINDOWS_PHONE") { #>
public struct Foo
<# { #>
Run Code Online (Sandbox Code Playgroud)
如果有人能够对这些问题有所了解,那么这是可能的,我将不胜感激!