T4模板在解决scheme中添加现有项目的组装
您好我需要在我的T4模板文件的解决scheme中添加一个现有项目的程序集。 问题是我的T4模板是在一个名为Project.WebApi的项目中,我需要在我的T4模板中的类是在名为Project.Common.WebApi的项目中。
我尝试导入这样的命名空间:
<#@ import namespace="Project.Common.WebApi.T4TemplateAttribute" #>
但是我得到这个错误:
The type or namespace name 'Project' could not be found (are you missing a using directive or an assembly reference?)
我已经尝试添加像这样的程序集:
<#@ assembly name="Project.Common.WebApi" #>
我得到这个错误:
Compiling transformation: Metadata file 'Project.Common.WebApi' could not be found
我的包含T4Template(Project.WebApi)的项目有一个Project.Common.WebApi的引用,但从我读的T4Template不使用项目中的引用。
我该如何解决这个问题?
T4几乎完全独立于其他代码。 尽pipe如此,使用assembly
指令仍然是正确的,但是您需要指定程序集的实际DLL的完整path,除非程序集在GAC中(它可能不是)。
幸运的是,你可以在T4指令中使用MSBuildmacros。 所以,你可能会得到类似的东西
<#@ assembly name="$(SolutionDir)Project.Common.WebApi\bin\Debug\Project.Common.WebApi.dll" #>
有关此语法的更多背景,请参阅MSDN 。
您还需要import namespace
指令。
最后,要小心项目build立顺序。 包含您的T4模板的项目现在取决于Project.Common.WebApi,所以您需要确保Project.Common.WebApi是首先构build的。 否则,您的T4模板可能会意外链接到较旧版本的程序集,使得错误难以追踪。
如果你已经有了一个项目引用,你就完成了,否则你需要正确设置依赖关系。 您可以通过“Project Dependencies …”对话框在Visual Studio中执行此操作。 右键单击该项目以查找它。
如果您使用T4模板的项目直接引用了该项目,则可以使用$(TargetDir)
<#@程序集名称=“$(TargetDir)Project.Common.WebApi.dll”#>
<#@ assembly name="$(TargetPath)" #>
就如此容易。
以防万一您正在使用C#
我认为这将是:
<#@ assembly name="$(SolutionDir)Project.Common.WebApi\\bin\\Debug\\Project.Common.WebApi.dll" #>
使用双斜杠。