0

Here's one. I have a bunch of T4s in one project / solution. This is a framework with support code and T4 templates.

In a different solution, I want to use this framework, but have the support classes / T4s remain in the original solution.

In the new solution I link to the support code and T4s (add existing / link). Now in the new solution I have a T4 which needs to include the linked T4. It has something like this:

<#@ template language="C#" debug="false" hostspecific="true"#> <#@ include file="..\Models\DALContextGenerator.tt"#> <#@ output extension=".cs"#><# Generate("..\Models\Model1.edmx");

>

In this case, DALContextGenerator.tt is in this solution, but is linked to the real DALContextGenerator.tt in a different solution. WHen I run the T4 I get an error ("Failed to resolve include text"). If I reference the physical location it is fine.

Any ideas?

Thanks

Ray

4

2 回答 2

1

据我所知,T4 引擎使用模板文件作为根,不知道 Visual Studio 解决方案和解决方案项。如果您使用 Visual Studio 链接到其他地方的文件,则此信息仅存储在项目文件中。T4 引擎查找相对于 T4 文件的包含路径。这就是引用 Visual Studio Link 相对失败的原因。但是使用绝对路径或指向物理文件的相对路径引用包含文件会成功。

以下是一些如何解决您的问题的想法,但没有我能想到的“顺利”解决方案:

  • 在原始包含文件和模板文件旁边的文件之间使用硬链接(命令行mklink /H source target:)
  • 如果您使用的是源代码控制系统(如 svn),您可以使用外部目录而无需复制您的原件
  • 拥有一个(元)T4 模板,该模板根据您从 Env.DTE Visual Studio 模型中获得的信息生成具有正确路径的实际 T4 模板
于 2013-03-25T16:53:35.460 回答
0

旧但相关的问题,我认为与其他线程相同,我在其中发布了回复,使用扩展 $(ProjectDir) 和 $(SolutionDir):https ://stackoverflow.com/a/42785952/1948625

于 2017-03-14T12:26:16.783 回答