【问题标题】:T4 code generator for Entity Framework - Failed to resolve include text for EF.Utility.CS.ttinclude实体框架的 T4 代码生成器 - 无法解析 EF.Utility.CS.ttinclude 的包含文本
【发布时间】:2015-06-30 09:27:29
【问题描述】:

我正在尝试使用 OpenRIA 服务自动化 Silverlight 5 应用程序的 CI 服务器的构建过程。

我有数据库优先的实体框架 .edmx 生成文件,从中生成 DomainModel,作为构建的一部分,我想通过 T4 代码生成器生成实体。

项目设置

我的服务器 .csproj 发生变化。

进口

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
# Microsoft.TextTemplating.targets are added after CSharp.targets
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\TextTemplating\Microsoft.TextTemplating.targets"/>

和属性

<PropertyGroup>
    <TransformOnBuild>true</TransformOnBuild>
    ...
<PropertyGroup>

已安装的 sdk 和工具:

损坏的构建

看起来正确,但是在构建时出现这样的错误

5>  Transforming template DomainModel\EntityConverters.tt...
5>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error : Failed to resolve include text for file:C:\{path to my project}\DomainModel\EF.Utility.CS.ttinclude. Line=-1, Column=-1
5>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error : Loading the include file 'EF.Utility.CS.ttinclude' returned a null or empty string. The transformation will not be run. . Line=21, Column=4

可疑

所有.tt 文件都有 T4 导入

<#@ include file="EF.Utility.CS.ttinclude"#> 

我怀疑它的目标是本地目录,甚至不是构建目录。

我很好奇为什么Microsoft.TextTemplating.targets 变量在{path to my project} 中针对EF.Utility.CS.ttinclude 而不是在C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes 中的实际位置。 根据这条路径,Loading the include file 'EF.Utility.CS.ttinclude' returned a null or empty string 似乎是合法的。

也许我错过了一些设置、导入或路径设置? 如何更改或更新此实用程序的路径?


已检查相关问答:

【问题讨论】:

  • 您是否尝试过stackoverflow.com/a/8210150/615522 或安装 Microsoft Web Developer Tools 和 Microsoft SQL Server Data Tools?
  • 安装 Microsoft Web Developer Tools 和 Microsoft SQL Server Data Tools 没有帮助。关于这个问题 - 事实并非如此。事件中描述的解决方法并非在所有情况下都有效。
  • 也许可以在 中设置完整路径

标签: entity-framework msbuild wcf-ria-services t4 ef-database-first


【解决方案1】:

问题可以通过在 T4 文件中添加到 EF.Utility.CS.ttinclude 的绝对或相对路径来解决。对于构建服务器,最好的解决方案可能是将通常可以在路径C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes 中找到的文件复制到您的项目中,然后更改行:

<#@ include file="EF.Utility.CS.ttinclude"#>

例如:

<#@ include file="..\..\EF.Utility.CS.ttinclude"#>

由于某种原因,当从 MSBuild 运行模板转换时,它会在 .tt 文件所在的相同位置查找 .ttinclude 文件。

【讨论】:

  • 但是... WHY? 为什么默认VS安装时自己生成的文件有问题?...
  • 我不确定这些文件是由 VS 生成的,但据我所知,问题只发生在 MSBuild 中,在 VS 中有效。
【解决方案2】:

我发现我能够将包含文件保留为

<#@ include file="EF.Utility.CS.ttinclude"#>

通过将以下内容添加到我的配置中

  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
  <connectionStrings>

【讨论】:

  • 我不再参与该项目并且存在这些问题,因此我很难验证 - 您能否确认它在从 MS Build 手动运行时是否会生成实体?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多