Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# T4在解决方案中添加现有项目组件的模板_C#_T4 - Fatal编程技术网

C# T4在解决方案中添加现有项目组件的模板

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" #> 但我

您好,我需要在T4模板文件中添加解决方案中现有项目的程序集。 问题是我的T4模板位于名为project.WebApi的项目中,而我在T4模板中需要的类位于名为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项目以便复制。好的,简短的解决方案!这要简单得多,向上看:)