相关疑难解决方法(0)

如何仅在发布版本上运行T4转换

我正在使用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模板基本上提供:

  1. 我正在做的一个加强版本(但是有批处理文件)
  2. 指向许多VS扩展,尝试在每个构建上运行T4内容.
  3. 建议手动修改项目文件(我不想这样做,因为它使进程在使用IDE时不可见)

在2017年,VS2017有更好的方法来实现我的目标吗?有些东西允许我只在发布版本上运行我的T4,它从IDE集成到解决方案中而不依赖于批处理文件?

另一个问题在运行T4模板时确定解决方案配置(调试/发布)显示了如何从T4模板中获取构建类型,但到那时对我来说已经太晚了.

t4 visual-studio-2017

7
推荐指数
0
解决办法
604
查看次数

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)

如果有人能够对这些问题有所了解,那么这是可能的,我将不胜感激!

.net t4 visual-studio-2010

6
推荐指数
1
解决办法
1616
查看次数

标签 统计

t4 ×2

.net ×1

visual-studio-2010 ×1

visual-studio-2017 ×1