T4 Text Template - Is it possible to get compilation symbols from host?

筅森魡賤 提交于 2019-12-01 17:54:12

Matt, They're not available, no as the compilation for your project and the compilation for the templates are completely isolated as of VS2010.

However I have a (somewhat clumsy) workaround for you.

If you include a stub file that contains your template directive, then you can set compiler options with the appropriate symbol for compilation.

e.g. a simple stub containing the following, named Define.t4:

<#@ template compilerOptions="/d:XBOX" debug="false" hostspecific="false" language="C#" #>

Put this in a subdirectory named XBOX and put a similar one in a directory named PHONE

<#@ template compilerOptions="/d:PHONE" debug="false" hostspecific="false" language="C#" #>

Note the compiler symbol definitions.

Now set an environment variable to be either XBOX or PHONE - let's say ARCHITECTURE

Now instead of the template directive in your templates, include the Define.t4 file and you will be able to use regular C#/VB condition syntax. Don't forget to put the #if on their own line. Here's an example:

<#@ include file="$(ProjectDir)%ARCHITECTURE%\Define.t4" #>
<#@ output extension=".txt" #>
<#
#if XBOX #>
public unsafe struct Foo
<#
#else #>
public struct Foo
<#
#endif #>

Hope this gets you moving.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!