在使用VS 2012时生成构建时如何生成T4文件

5
我正在尝试使用VS2012在项目每次构建时生成代码。我的解决方案中有3个项目:
1. project 1包含一些类 2. project 2具有通用模板 3. project 3具有读取JSON文件并调用project 2中的通用模板来生成其文件的模板。
当我点击“Build / Transform All T4 Templates”时,没有问题,生成顺利进行。但是,我正在尝试配置我的构建以自动包括这一步骤的每次构建。我将以下代码添加到了我的csproj中:
<Import Project="$MsBuildToolsPath)\Microsoft.CSharp.Targets" />
<PropertyGroup>
   <TransformOnBuild>true</TransformOnBuild>
   <OverWriteReadOnlyOutputFiles>true</OverWriteReadOnlyOutputFiles>
</PropertyGroup>
<Import Project="$(MSBuildExtensionPath32)\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets"/>

我在电脑上找到了路径"\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets"并已经设置好了。这个例子是我从这里拿的:get-visual-studio-to-run-a-t4-template-on-every-build
问题出在这一行代码上: <#@ include file="$(SolutionDir)\xxx\yyy\zzz\mytemplate.tt">
我收到了以下错误信息: Failed to resolve include text for file : D:\Projects\pppp\qqq\eeee\$(SolutionDir)\xxx\yyy\zzz\mytemplate.tt
因为当手动生成模板时,它可以正常工作(Build/Transform All T4 Templates),所以我想知道生成它的问题可能是什么。你有任何想法吗?
1个回答

2
问题在于在构建过程中运行模板时,它是在不同的主机下执行的,因此$(SolutionDir) 宏不存在。请尝试使用相对路径,例如:
<#@ include file="..\xxx\yyy\zzz\mytemplate.tt">

这可能适用于include,但汇编怎么办?我使用$(SolutionDir)来定位它们,如果我尝试使用相对路径,我会遇到同样的错误。给定的程序集名称或代码库无效。谢谢你的帮助。 - Arthis
最终我使用了绝对路径,因为其他的方法都没有正常工作,而我需要继续前进。 - Arthis
我不确定相对路径的问题出在哪里,但你可以尝试使用 Host.ResolvePath 方法。 - Sergey Rybalkin
我通过定义一个环境变量并在我的路径中使用它来解决了这个问题(例如 `%EnvVar%\xxx\yyy\zzz\mytemplate.tt)。 - hypercode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接