【问题标题】:T4 template adding assembly of existing project in solutionT4 模板在解决方案中添加现有项目的程序集
【发布时间】:2013-06-06 12:31:59
【问题描述】:

您好,我需要在我的 T4 模板文件中的解决方案中添加现有项目的程序集。 问题是我的 T4 模板位于名为 Project.WebApi 的项目中,而我在 T4 模板中需要的类位于名为 Project.Common.WebApi 的项目中。

我尝试过像这样导入命名空间:

<#@ import namespace="Project.Common.WebApi.T4TemplateAttribute" #>

但我收到此错误:

找不到类型或命名空间名称“Project”(您是否缺少 using 指令或程序集引用?)

我尝试像这样添加程序集:

<#@ assembly name="Project.Common.WebApi" #>

我得到了这个错误:

编译转换:找不到元数据文件“Project.Common.WebApi”

我的包含 T4Template (Project.WebApi) 的项目有一个对 Project.Common.WebApi 的引用,但从我读到的 T4Template 没有使用项目中的引用。

我该如何解决这个问题?

【问题讨论】:

    标签: c# t4


    【解决方案1】:

    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 中执行此操作。右键单击该项目以找到它。

    【讨论】:

    • 应该是$(SolutionDir)Project... 而不是$(SolutionDir)\Project...,因为$(SolutionDir) 已经附加了尾部反斜杠。
    • 好一个!编辑了答案。谢谢!
    • 也应该是 $(ConfigurationName) 而不是 Debug
    【解决方案2】:

    如果您的 T4 模板项目直接引用该项目,您可以使用 $(TargetDir)

    【讨论】:

    • 这个解决方案对我有用。 T4 和 DLL 必须在同一个项目中,或者包含 T4 的项目引用 DLL 项目以便复制它。
    【解决方案3】:
    <#@ assembly name="$(TargetPath)" #>
    

    就这么简单。

    【讨论】:

    • 好,简短的解决方案!
    • 这要简单得多,你去吧:)
    【解决方案4】:

    如果您使用 C#,请使用 double slash \\

    我想应该是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 2013-02-25
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      相关资源
      最近更新 更多