2012-07-02 49 views
0

我有一种情况,我们有一个使用Portable AreasT4MVC的解决方案,它有一个T4MVC的独立项目,其中包含7个可移植区域和主要MVC3应用程序的所有生成文件。我们按照指示here,我们在构建解决方案时自动生成类。T4MVC与TeamCity上的便携式区域

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

我已经按照关于在构建服务器here上设置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> 

当这个执行我得到以下从/ V的MSBuild输出:诊断组:

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) 

这样看来,在构建服务器T4似乎无法找到它需要的项目参考来生成必要的类。我已经尝试过输入文件夹和程序集引用的各种组合,但是看不到T4来“看到”它需要的文件。

有没有人有任何想法如何解决这个问题?

回答

0

坦率地说,我不确定你能否完全解决这个问题,因为T4MVC需要VS主机才能访问DTE对象模型。请参阅以下相关主题:Using T4MVC with build script

+0

这是非常令人沮丧,因为我有实际T4引擎在构建服务器上工作,完全不需要VS。 – Nathan

0

如果David Ebbo正确,请在构建服务器上的命令行中运行VS(devenv.exe)。

例如你不能建立使用的MSBuild太.vdproj安装的项目,所以我们从构建服务器来构建安装在命令行中运行VS ...

+0

哇,这似乎有点疯狂作为自动生成脚本的一部分,不是吗?它消耗的资源量可能会损害构建服务器的可伸缩性。 –

+1

它需要一段时间,但由于msbuild无法处理vdproj项目,所以没有其他办法。有一个明显的启动延迟,但实际上它比在同一台机器上手动触发VS GUI中的构建要快。 –