我正在尝试使用OpenRIA Services自动化Silverlight 5应用程序的CI服务器的构建过程。
我有数据库优先的Entity Framework .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
变量在EF.Utility.CS.ttinclude
中定位{path to my project}
而不是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
。
根据这条道路,ticket
似乎是合法的。
也许我错过了一些设置,导入或路径设置? 我如何更改或更新此实用程序的路径?
相关Q&amp; A已经检查过:
答案 0 :(得分:2)
可以通过在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运行模板转换时,它会在.ttinclude
文件所在的同一位置查找.tt
个文件。
答案 1 :(得分:0)
我发现我能够将包含文件保留为
<#@ 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>