c# - T4 模板在解决方案中添加现有项目的程序集

标签 c# t4

您好,我需要在我的 T4 模板文件的解决方案中添加现有项目的程序集。 问题是我的 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 的工作几乎完全独立于您的其余代码。虽然你在正确的轨道上,使用 assembly 指令,但你需要指定程序集的实际 DLL 的完整路径,除非程序集在 GAC 中(它可能不是)。

不过幸运的是,您可以在 T4 指令中使用 MSBuild 宏。所以,你可能会得到类似的东西

<#@ assembly name="$(SolutionDir)Project.Common.WebApi\bin\Debug\Project.Common.WebApi.dll" #>

参见 MSDN有关此语法的更多背景信息。

您还需要 import namespace 指令。

最后,注意项目构建顺序。包含您的 T4 模板的项目现在依赖于 Project.Common.WebApi,因此您需要确保首先构建 Project.Common.WebApi。否则,您的 T4 模板可能会意外链接到程序集的旧版本,从而使错误很难跟踪。

如果你已经有一个项目引用它,你就大功告成了,否则你需要正确设置依赖关系。您可以在 Visual Studio 中通过“项目依赖关系...”对话框执行此操作。右键单击该项目以找到它。

关于c# - T4 模板在解决方案中添加现有项目的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962170/

相关文章:

c# - 如何使用linq从xml中获取具有相同名称的不同值

.net - Entity Framework T4 模板的奇怪错误 - 创建新的代码文件

t4 - 从 TextTransform.exe 获取参数值到模板中

c# - 使用 Reg-Free-COM 时,事件未发送到基于 WPF 的 ActiveX 控件(COM 互操作)

c# - 如何将 C# List<byte> 转换为 NSData?

.net - 有人知道从 xsd 生成类的任何 T4 模板吗?

asp.net - 修改 FormView 的默认模板

c# - T4 - Entity Framework 错误 : Method not found: 'System.Data.Entity.DbSet` 1

c# - Entity Framework 查询说找不到我从未指定的列的列

c# - 如何检查泛型参数在 .NET 4.0 中是否是动态的