C# T4在解决方案中添加现有项目组件的模板
您好,我需要在T4模板文件中添加解决方案中现有项目的程序集。 问题是我的T4模板位于名为project.WebApi的项目中,而我在T4模板中需要的类位于名为project.Common.WebApi的项目中 我尝试过这样导入名称空间:C# T4在解决方案中添加现有项目组件的模板,c#,t4,C#,T4,您好,我需要在T4模板文件中添加解决方案中现有项目的程序集。 问题是我的T4模板位于名为project.WebApi的项目中,而我在T4模板中需要的类位于名为project.Common.WebApi的项目中 我尝试过这样导入名称空间: <#@ import namespace="Project.Common.WebApi.T4TemplateAttribute" #> <#@ assembly name="Project.Common.WebApi" #> 但我
<#@ import namespace="Project.Common.WebApi.T4TemplateAttribute" #>
<#@ assembly name="Project.Common.WebApi" #>
但我得到了这个错误:
找不到类型或命名空间名称“Project”(是否缺少using指令或程序集引用?)
我尝试过这样添加程序集:
<#@ import namespace="Project.Common.WebApi.T4TemplateAttribute" #>
<#@ assembly name="Project.Common.WebApi" #>
我得到了这个错误:
编译转换:找不到元数据文件“Project.Common.WebApi”
包含T4Template(project.WebApi)的我的项目引用了project.Common.WebApi,但从我所读到的T4Template中没有使用项目中的引用
如何解决这个问题?T4的工作方式几乎完全独立于代码的其余部分。尽管使用
assembly
指令,您已经走上了正确的道路,但是您需要指定程序集的实际DLL的完整路径,除非程序集位于GAC中(它可能不在GAC中)
不过,幸运的是,您可以在T4指令中使用MSBuild宏。所以,你可能会得到
<#@ assembly name="$(SolutionDir)Project.Common.WebApi\bin\Debug\Project.Common.WebApi.dll" #>
有关此语法的更多背景信息,请参阅
您还需要import namespace
指令
最后,要警惕项目构建顺序。包含T4模板的项目现在依赖于project.Common.WebApi,因此您需要确保首先构建project.Common.WebApi。否则,您的T4模板可能会意外链接到程序集的旧版本,使bug很难跟踪
如果您已经有了对它的项目引用,那么一切都完成了,但是您需要正确设置依赖项。您可以在Visual Studio中通过“项目依赖项…”对话框执行此操作。右键单击项目以找到它。如果使用T4模板的项目直接引用该项目,则可以使用$(TargetDir)
以防万一,请使用
双斜杠\
我想会是这样的:
<#@ assembly name="$(SolutionDir)Project.Common.WebApi\\bin\\Debug\\Project.Common.WebApi.dll" #>
就这么简单。它应该是$(SolutionDir)Project…
而不是$(SolutionDir)\Project…
,因为$(SolutionDir)
已经附加了尾随的反斜杠。很好!编辑了答案。谢谢也应该是$(ConfigurationName)而不是debugh此解决方案适合我。T4和DLL必须在同一个项目中,或者包含T4的项目引用DLL项目以便复制。好的,简短的解决方案!这要简单得多,向上看:)