Msbuild 在TeamCity上配备便携式区域的T4MVC

Msbuild 在TeamCity上配备便携式区域的T4MVC,msbuild,teamcity,t4mvc,portable-areas,Msbuild,Teamcity,T4mvc,Portable Areas,我遇到的情况是,我们有一个使用T4MVC的解决方案,它有一个单独的项目,其中为7个可移植区域和主MVC3应用程序生成了所有文件。在构建解决方案时,我们已经按照说明自动生成了类 虽然在VS2010中,这一切都可以在调试和发布版本中正常工作,但我遇到的问题是我试图在TeamCity上运行它 <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsof

我遇到的情况是,我们有一个使用T4MVC的解决方案,它有一个单独的项目,其中为7个可移植区域和主MVC3应用程序生成了所有文件。在构建解决方案时,我们已经按照说明自动生成了类

虽然在VS2010中,这一切都可以在调试和发布版本中正常工作,但我遇到的问题是我试图在TeamCity上运行它

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">

  <PropertyGroup>
    <Configuration>Release</Configuration>
    <TransformOnBuild>true</TransformOnBuild>
    <TransformFile>T4MVC\T4MVC.tt</TransformFile>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
  </PropertyGroup>


  <ItemGroup>
    <None Include="T4MVC\T4MVC.tt">
      <OutputFilePath>$(MSBuildProjectDirectory)\T4MVC</OutputFilePath>
    </None>
  </ItemGroup>

  <ItemGroup>
    <ProjectsToBuild Include="**\*proj" Exclude="ThemeGenerator\**" />
  </ItemGroup>

  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />

  <Target Name="Clean">
    <ItemGroup>
      <BinFiles Include="*\bin\*.*" />
    </ItemGroup>
    <Delete Files="@(BinFiles)" />
  </Target>

  <Target Name="Build" DependsOnTargets="Clean;Transform">
    <MSBuild Projects="@(ProjectsToBuild)"
             ContinueOnError="false"
             Properties="Configuration=$(Configuration)" /> 
  </Target>
</Project>
我已经按照有关在生成服务器上设置T4的说明进行了操作,如果在生成服务器上运行msbuild,我可以看到它能够启动TextTemplate.exe并查找生成文件,问题是它从未找到要转换的文件

在执行TeamCity上运行的相同构建脚本时,我已设法在本地计算机上重现相同的行为

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">

  <PropertyGroup>
    <Configuration>Release</Configuration>
    <TransformOnBuild>true</TransformOnBuild>
    <TransformFile>T4MVC\T4MVC.tt</TransformFile>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
  </PropertyGroup>


  <ItemGroup>
    <None Include="T4MVC\T4MVC.tt">
      <OutputFilePath>$(MSBuildProjectDirectory)\T4MVC</OutputFilePath>
    </None>
  </ItemGroup>

  <ItemGroup>
    <ProjectsToBuild Include="**\*proj" Exclude="ThemeGenerator\**" />
  </ItemGroup>

  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />

  <Target Name="Clean">
    <ItemGroup>
      <BinFiles Include="*\bin\*.*" />
    </ItemGroup>
    <Delete Files="@(BinFiles)" />
  </Target>

  <Target Name="Build" DependsOnTargets="Clean;Transform">
    <MSBuild Projects="@(ProjectsToBuild)"
             ContinueOnError="false"
             Properties="Configuration=$(Configuration)" /> 
  </Target>
</Project>

释放
真的
T4MVC\T4MVC.tt
真的
$(MSBuildProjectDirectory)\T4MVC
执行此操作时,我从msbuild和/v:diag集合中获得以下输出:

Building with tools version "4.0".
Target "CreateCandidateT4ItemList: (TargetId:2)" in file "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" from project "C:\TeamCity\buildAgent\work\daad348639a87062\Project_Build.xml" (target "Transform" depends on it):
Using "Message" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Message" (TaskId:2)
  Creating a list of candidate items that might need to be processed by T4 items (TaskId:2)
Done executing task "Message". (TaskId:2)
Using "CreateItem" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "CreateItem" (TaskId:3)
Done executing task "CreateItem". (TaskId:3)
Done building target "CreateCandidateT4ItemList" in project "Project_Build.xml".: (TargetId:2)
Target "SelectItemsForTransform: (TargetId:3)" in file "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemp
lating.targets" from project "C:\TeamCity\buildAgent\work\daad348639a87062\Project_Build.xml" (target "Transform" depends on it):
Task "Error" skipped, due to false condition; ($(TransformFile)=='') was evaluated as (C:\TeamCity\buildAgent\work\daad348639a87062\T4MVC\T4MVC.tt=='').
Initializing task factory "CodeTaskFactory" from assembly "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll".
Using "FilterCandidatesBasedOnItemSpec" task from the task factory "Code Task Factory".
Task "FilterCandidatesBasedOnItemSpec" (TaskId:4)
Done executing task "FilterCandidatesBasedOnItemSpec". (TaskId:4)
Done building target "SelectItemsForTransform" in project "Project_Build.xml".: (TargetId:3)
Target "CreateT4ItemLists: (TargetId:4)" in file "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" from project "C:\TeamCity\buildAgent\work\daad348639a87062\Project_Build.xml" (target "ExecuteTransformations" depends on it):
Task "Message" (TaskId:5)
  Creating T4 items lists for project  ()... (TaskId:5)
Done executing task "Message". (TaskId:5)
Done building target "CreateT4ItemLists" in project "Project_Build.xml".: (TargetId:4)
Target "ExecuteTransformations: (TargetId:5)" in file "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" from project "C:\TeamCity\buildAgent\work\daad348639a87062\Project_Build.xml" (target "Transform" depends on it):
Using "TransformTemplates" task from assembly "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.Build.Tasks.dll".
Task "TransformTemplates" (TaskId:6)
  Directive processors: (TaskId:6)
    {none} (TaskId:6)
   (TaskId:6)
  Include folders: (TaskId:6)
    {none} (TaskId:6)
   (TaskId:6)
  Assembly references: (TaskId:6)
    {none} (TaskId:6)
   (TaskId:6)
  Reference paths: (TaskId:6)
    {none} (TaskId:6)
   (TaskId:6)
  Parameter values: (TaskId:6)
    {none} (TaskId:6)
   (TaskId:6)
  Full list of templates passed in : (TaskId:6)
    {none} (TaskId:6)
   (TaskId:6)
  Performing full T4 transformation (TaskId:6)
    MinimalRebuildFromTracking = True (TaskId:6)
    forcedRebuildRequired = False (TaskId:6)
  \tTrackerLogDirectory = <null> (TaskId:6)
  Tracking is disabled. TrackerLogDirectory has not been specified (TaskId:6)
Done executing task "TransformTemplates". (TaskId:6)
Using "PreprocessTemplates" task from assembly "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.Build.Tasks.dll".
Task "PreprocessTemplates" (TaskId:7)
  Directive processors: (TaskId:7)
    {none} (TaskId:7)
   (TaskId:7)
  Include folders: (TaskId:7)
    {none} (TaskId:7)
   (TaskId:7)
  Assembly references: (TaskId:7)
    {none} (TaskId:7)
   (TaskId:7)
  Reference paths: (TaskId:7)
    {none} (TaskId:7)
   (TaskId:7)
  Parameter values: (TaskId:7)
    {none} (TaskId:7)
   (TaskId:7)
  Full list of templates passed in : (TaskId:7)
    {none} (TaskId:7)
   (TaskId:7)
  Performing full T4 preprocessing (TaskId:7)
    MinimalRebuildFromTracking = True (TaskId:7)
    forcedRebuildRequired = False (TaskId:7)
  \tTrackerLogDirectory = <null> (TaskId:7)
  Tracking is disabled. TrackerLogDirectory has not been specified (TaskId:7)
Done executing task "PreprocessTemplates". (TaskId:7)
使用工具版本“4.0”构建。
文件“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets”中的目标“CreateCandidateT4ItemList:(TargetId:2)”,来自项目“C:\TeamCity\buildAgent\work\daad348639a87062\project\u Build.xml”(目标“转换”取决于此):
使用程序集“Microsoft.Build.Tasks.v4.0,版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a”中的“消息”任务。
任务“消息”(任务ID:2)
创建T4项目可能需要处理的候选项目列表(TaskId:2)
已完成执行任务“消息”。(任务编号:2)
使用程序集“Microsoft.Build.Tasks.v4.0,版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a”中的“CreateItem”任务。
任务“CreateItem”(任务ID:3)
已完成执行任务“CreateItem”。(任务编号:3)
已完成在项目“project_Build.xml”中构建目标“CreateCandidateT4ItemList”。(TargetId:2)
文件“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemp”中的目标“SelectItemsForTransform:(TargetId:3)”
lating.targets“来自项目C:\TeamCity\buildAgent\work\daad348639a87062\project\u Build.xml”(目标“转换”取决于此):
由于条件错误,跳过任务“错误”;($(TransformFile)=''被评估为(C:\TeamCity\buildAgent\work\daad348639a87062\T4MVC\T4MVC.tt='')。
正在从程序集“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll”初始化任务工厂“CodeTaskFactory”。
使用任务工厂“代码任务工厂”中的“FilterCandidatesBasedOnItemSpec”任务。
任务“FilterCandidatesBasedOnItemSpec”(任务ID:4)
已完成执行任务“FilterCandidatesBasedOnItemSpec”。(任务编号:4)
已完成在项目“project_Build.xml”中生成目标“SelectItemsForTransform”。(TargetId:3)
项目“C:\TeamCity\buildAgent\work\daad348639a87062\project\U Build.xml”中的文件“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets”中的目标“CreateT4ItemList:(Target:4)”(目标“ExecuteTransformations”取决于此):
任务“消息”(任务ID:5)
正在为项目()创建T4项目列表。。。(任务编号:5)
已完成执行任务“消息”。(任务编号:5)
已完成在项目“project_Build.xml”中构建目标“CreateT4ItemList”。(TargetId:4)
来自项目“C:\TeamCity\buildAgent\work\daad348639a87062\project\U Build.xml”的文件“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets”中的目标“ExecuteTransformations:(Target:5)”(目标“转换”取决于此):
使用程序集“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.Build.Tasks.dll”中的“TransformTemplates”任务。
任务“TransformTemplates”(任务ID:6)
指令处理器:(任务ID:6)
{none}(任务ID:6)
(任务编号:6)
包括文件夹:(任务ID:6)
{none}(任务ID:6)
(任务编号:6)
程序集引用:(TaskId:6)
{none}(任务ID:6)
(任务编号:6)
引用路径:(任务ID:6)
{none}(任务ID:6)
(任务编号:6)
参数值:(TaskId:6)
{none}(任务ID:6)
(任务编号:6)
传入模板的完整列表:(TaskId:6)
{none}(任务ID:6)
(任务编号:6)
执行完整的T4转换(任务ID:6)
MinimalRebuildFromTracking=True(任务ID:6)
ForcedBuildRequired=False(任务ID:6)
\tTrackerLogDirectory=(任务ID:6)
跟踪被禁用。尚未指定TrackerLogDirectory(任务ID:6)
已完成执行任务“TransformTemplates”。(任务编号:6)
使用程序集“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.Build.Tasks.dll”中的“预处理模板”任务。
任务“预处理模板”(任务ID:7)
指令处理器:(任务ID:7)
{none}(任务ID:7)
(任务编号:7)
包括文件夹:(任务ID:7)
{none}(任务ID:7)
(任务编号:7)
程序集引用:(TaskId:7)
{none}(任务ID:7)
(任务编号:7)
引用路径:(任务ID:7)
{none}(任务ID:7)
(任务编号:7)
参数值:(TaskId:7)
{none}(任务ID:7)
(任务编号:7)
传入模板的完整列表:(TaskId:7)
{none}(任务ID:7)
(任务编号:7)
执行完整的T4预处理(任务ID:7)
MinimalRebuildFromTracking=True(任务ID:7)
ForcedBuildRequired=False(任务ID:7)
\tTrackerLogDirectory=(任务ID:7)
跟踪被禁用。尚未指定TrackerLogDirectory(任务ID:7)
已完成执行任务“预处理模板”。(任务编号:7)
在构建服务器T4上,似乎无法找到需要引用以生成必要类的项目。我尝试了输入文件夹和程序集引用的各种组合,但无法让T4“查看”它需要的文件


有人知道如何解决这个问题吗?

坦率地说,我不确定你是否能让它起作用,因为T4MVC