我想在每次构建时构建我的.tt文件。我找到了这个解决方案(让Visual Studio在每个构建上运行T4模板,由Cheburek回答),并按照的步骤运行
- 安装Visual Studio SDK
- 安装Visual Studio 2010建模和可视化SDK
- 将
Microsoft.TextTemplating.targets
和<TransformOnBuild>true</TransformOnBuild>
的导入添加到my.csproj
我现在的问题是:
我在T4文件中使用以下程序集导入:
<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="My.Example.Namespace.Path" #>
我需要这个,因为我需要访问在同一个项目中定义的类。但是现在(我认为因为tt转换是在构建中完成的第一件事)我不能使用这个名称空间导入,因为在构建中发生了以下错误:
Error Compiling transformation: Metadata file '$(TargetPath)' could not be found.
T4文件在"正常"使用时(保存T4文件时生成文件)
是否可以以某种方式执行T4转换(作为最后一个构建步骤),这样我就可以在T4文件中访问$(TargetPath)
而不会出现问题?
我今天遇到了同样的问题,正在寻找答案。问题是dll尚未生成,无法加载。尽管如果TargetPath中已经有一个成功的构建,它应该可以工作。
我完成这项工作的方法是将代码分成两个项目。t4模板中使用的代码现在在另一个项目中。
我不得不在原来的项目中引用新项目
在原始项目的t4模板中,我不得不更改组件参考:
<#@ assembly name="$(SolutionDir)newprojectbinDebugnewproject.dll" #>