2012-07-02 4 views
0

Portable AreasT4MVC을 사용하는 솔루션이있는 T4MVC 용 별도 프로젝트가있는 상황에서 7 개의 휴대용 영역과 기본 MVC3 응용 프로그램에 대해 생성 된 모든 파일이 있습니다. 우리는 지침을 따라 here 솔루션을 빌드 할 때 자동으로 클래스를 생성합니다.TeamCity의 휴대용 영역이있는 T4MVC

VS2010에서는 모두 디버그 & 릴리스 빌드에서 정상적으로 작동하지만 문제가 발생하는 곳에서는 TeamCity에서 실행되도록 노력하고 있습니다.

빌드 서버 here에서 T4를 설정하는 방법을 따라했으며 빌드 서버에서 msbuild를 실행하면 TextTemplate.exe를 실행하고 파일을 생성 할 수 있다는 것을 알 수 있습니다. 문제는 그 것입니다. 변환 할 파일을 찾지 못합니다.

TeamCity에서 실행되는 빌드 스크립트를 실행할 때 로컬 컴퓨터에서 동일한 동작을 재현 할 수있었습니다. 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) 

빌드 서버 T4에 그게 필요로하는 프로젝트를 찾을 수 없습니다 보인다 나타납니다이 내가/v의 msbuild를 출력 다음을 얻을 실행

<?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가 필요한 파일을 "볼"수 없게되었습니다.

아무도 아이디어를 해결하는 방법이 있습니까?

답변

0

솔직히 말해서 T4MVC가 DTE 개체 모델에 액세스하기 위해 VS 호스트를 필요로하기 때문에 전혀 작동하지 않을지 확신 할 수 없습니다. 관련 스레드를 참조하십시오 : Using T4MVC with build script

+0

너무 msbuild를를 사용 .vdproj 설치 프로젝트를 빌드 할 수없는, 그래서 우리는 설치 프로그램을 구축 할 수있는 빌드 서버에서 명령 줄에서 VS를 실행하는 예를 들어

... T4 엔진은 VS를 필요로하지 않고 서버를 구축 할 수 있습니다. – Nathan

0

David Ebbo가 맞으면 빌드 서버의 명령 줄에서 VS (devenv.exe)를 실행하십시오. 내가 실제 가지고있는이 매우 실망

+0

와우, 자동화 된 빌드 스크립트의 일부로 약간 미친 것처럼 보입니까? 소비하는 리소스의 양은 빌드 서버의 확장성에 큰 타격을 줄 수 있습니다. –

+1

시간이 좀 걸리지 만 msbuild는 vdproj 프로젝트를 처리 할 수 ​​없으므로 다른 방법은 없습니다. 눈에 띄는 시작 지연이 있지만 실제로 동일한 시스템의 VS GUI에서 수동으로 트리거하는 것보다 빠릅니다. –