2011-09-21 5 views
0

맞춤형 컨트롤러 (서비스 포함) 용 T4 템플릿을 만들려고합니다. 그러나, 나는 몇 가지 문제를 설정하고있다. 나는 현재 T4 툴 에디터와 TextTemplatingFileGenerator를 Custom Tool로 사용하고 있습니다. 실험 할 때 몇 가지 문제가 있습니다 :T4 템플릿을 사용하는 상황이 있습니다.

1 : MvcTextTemplateHost를 사용해 봅니다. mvcHost = (MvcTextTemplateHost) (Host); 그것은 "형식 또는 네임 스페이스 이름 MvcTextTemplateHost 찾을 수 없습니다 (사용 지시문 또는 어셈블리 참조가 누락되었습니다.). 사용자 지정 도구를 지우려면 말했지만 내가 어떻게 생성 된 T4 파일을 볼 수 있는지 궁금 해서요.

2 : 또 다른 접근 방식은 Steve Sanderson의 CustomTemplate 이었지만 DynamicTransform이 발견되지 않아 거기에서 문제가 발생하여 어디에서 파일을 사용할 수 있는지 궁금합니다. 도구를 지울 필요가 있다면 ?이 들어, 다음 어떻게 생성 된 샘플 파일을 보려면 어떻게해야합니까 대단히 감사합니다

최대 길만

일부 샘플 코드 :.

,
<#@ Template Language="C#" HostSpecific="True" Inherits="DynamicTransform" #> 
<#@ Output Extension="cs" #> 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Linq.Expressions; 
using System.Text; 

namespace someNamespace 
{ 

<# 
    var modelType = (CodeType)Model.ModelType; 
    var modelName = modelType.Name; 
    var modelNamePlural = Model.ModelTypePluralized; 
    var modelVariable = modelName.ToLower(); 
    var relatedEntities = ((IEnumerable)Model.RelatedEntities).OfType<RelatedEntityInfo>(); 
    var primaryKeyProperty = modelType.VisibleMembers().OfType<CodeProperty>().Single(x => x.Name == Model.PrimaryKey); 
    var routingName = Regex.Replace(Model.ControllerName, "Controller$", "", RegexOptions.IgnoreCase); 
    var isObjectContext = ((CodeType)Model.DbContextType).IsAssignableTo<System.Data.Objects.ObjectContext>(); 
#> 
    public class foo 
    { 
     //This is a basic comment. 
    } 
} 
+0

문제를 재현하는 간단한 템플릿 코드를 게시 할 수 있습니까? – FuleSnabel

+0

생성 된 코드를 보는 한 가지 방법은 사용자 지정 도구를 지정하는 것입니다. TextTemplatingFilePreprocessor – FuleSnabel

+0

DynamicTransform 클래스가 정의 된 위치를 파악할 수있는 경우 T4에서이 어셈블리를 다음과 같이 참조 할 수 있습니다. <# @ assembly name = "$ (SolutionDir) \ bin \ Debug \ TheDynamicTransformAssembly.dll "#> – FuleSnabel

답변

2

두 경우 모두 Visual Studio 프로젝트에서 T4 템플릿을 사용하고 TextTemplatingFileGenerator를 사용자 지정 도구로 사용하여 템플릿에서 코드를 생성하는 것처럼 보입니다.

1 : MvcTextTemplatingHost는 ASP.NET MVC보기 추가 또는 컨트롤러 추가 대화 상자를 사용할 때만 사용할 수있는 사용자 지정 T4 호스트입니다. TextTemplatingFileGenerator 사용자 지정 도구를 사용할 때 사용할 수 없거나 제대로 초기화되지 않습니다.

2 : Steve Sanderson의 MvcScaffolding/T4Scaffolding은 자체 T4 호스트를 사용하므로 비슷한 문제가 발생합니다. 사용자 정의 T4 스캐 폴딩 템플릿과 함께 NuGet 패키지 관리자 콘솔을 사용하는 경우 작동하지만 TextTemplatingFileGenerator 사용자 정의 도구로는 작동하지 않습니다. DynamicTransform 클래스 자체는 존재하지 않습니다. CodePlex의 T4Scaffolding source code을 살펴보면 InvokeScaffoldTemplateCmdlet 클래스에서 Inherits = "DynamicTransform"지시문이 실제로 제거되고 동적 모델 객체에 대한 참조로 바뀌 었음을 알 수 있습니다. 컨트롤러를 스캐 폴딩하면 처리를 위해 T4 템플릿에 전달되기 전에 사용자 설정 호스트 및 동적 모델 객체에 다양한 속성 (예 : Model.ModelType)이 설정됩니다.

위의 두 경우 모두 T4 템플릿을 TextTemplatingFileGenerator와 함께 사용하면 T4 템플릿에서 사용하기 전에 초기화해야하는 사용자 지정 템플릿 호스트를 사용하기 때문에 작동하지 않습니다.

나는 옵션이 생각 :

  1. 사용자 지정 ASP.NET MVC T4 템플릿을 생성하고 추가 컨트롤러 대화 상자를 사용하여 사용자 정의 컨트롤러를 생성하기 위해 ASP.NET의 도구를 사용합니다.
  2. 사용자 지정 스캐 폴딩 T4 템플릿을 만들고 NuGet Package Manager 콘솔을 사용하여 사용자 지정 컨트롤러를 생성합니다.
  3. T4 템플릿에서 사용할 수있는 사용자 지정 호스트를 초기화하는 사용자 지정 도구를 만듭니다.

옵션 2) 아마도 MvcScaffolding이 기존 코드를 제거하지 않고 기존 컨트롤러 코드를 업데이트 할 수 있다고 생각하기 때문에 최선의 방법 일 수 있습니다.

+0

도움이되는 답변에 감사드립니다. 나는 그것을 매우 고맙게 생각한다. – tehdoommarine

관련 문제