2009-04-24 6 views
7

Visual Web Developer Express 2008에서 SubSonic ASP.NET MVC 템플릿이 내가 추가 한 새 데이터베이스에서 작동하지 않는 것 같습니다. Chinook 데이터베이스를 제거하고 내 데이터베이스를 만들었습니다. Models 폴더의 .tt 파일은 코드를 생성하는 데 사용되지만 ConnectionStringName을 web.config에서 설정 한 것과 관계없이 변경되지 않습니다.Visual Web Developer Express의 SubSonic ASP.NET MVC 샘플

각 .tt 파일을 마우스 오른쪽 버튼으로 클릭하고 '사용자 지정 도구 실행'은 오류 메시지를 제외하고 아무 것도 생성하지 않습니다.

Cannot find custom tool 'TextTemplatingFileGenerator' on this system. 

해당 도구는 어디에 보관됩니까? 새 컨트롤러 또는보기를 만들 때 사용되는 .tt 파일이 CodeTemplates에 있으므로이 작업을 수행하는 도구가 있다고 가정합니다.

+0

T4 템플릿은 일반 MVC 프로젝트에서 작동합니까? 나는 t4 템플릿이 익스프레스와 함께 설치되지 않을 것이라고 생각하고 있습니까? – jfar

답변

10

Adam's 주석과 함께 VS Express에서이 작업을 수행 할 수 있지만, 아담이 제안한대로 템플릿에 필요한 변경 사항이 있습니다.

Visual Studio 요구 사항은 활성 프로젝트의 경로를 가져 오는 데 사용되며,이 프로젝트는 web.config 파일과 app_data 경로를 찾는 데 사용됩니다. 이 값은 일반적으로 프로젝트 내에서 알려져 있기 때문에, 우리는 대체 값들 하드 코딩 할 수있는 _Settings.tt 지금처럼 파일

업데이트 :

... 
const string ConnectionStringName="Chinook"; 
//Use this when not building inside visual studio standard or higher 
//make sure to include the trailing backslash! 
const string ProjectPathDefault="c:\\path\\to\\project\\"; 

... 

public EnvDTE.Project GetCurrentProject() { 

     if (Host is IServiceProvider) 
     { 
      IServiceProvider hostServiceProvider = (IServiceProvider)Host; 
      if (hostServiceProvider == null) 
       throw new Exception("Host property returned unexpected value (null)"); 

      EnvDTE.DTE dte = (EnvDTE.DTE)hostServiceProvider.GetService(typeof(EnvDTE.DTE)); 
      if (dte == null) 
       throw new Exception("Unable to retrieve EnvDTE.DTE"); 

      Array activeSolutionProjects = (Array)dte.ActiveSolutionProjects; 
      if (activeSolutionProjects == null) 
       throw new Exception("DTE.ActiveSolutionProjects returned null"); 

      EnvDTE.Project dteProject = (EnvDTE.Project)activeSolutionProjects.GetValue(0); 
      if (dteProject == null) 
       throw new Exception("DTE.ActiveSolutionProjects[0] returned null"); 

      return dteProject; 
     } 
     return null; 
} 

... 

public string GetConfigPath(){ 
     EnvDTE.Project project = GetCurrentProject(); 
     if (project != null) 
     { 
      foreach(EnvDTE.ProjectItem item in project.ProjectItems) 
      { 
      // if it is the configuration, then open it up 
      if(string.Compare(item.Name, "Web.config", true) == 0) 
      { 
       System.IO.FileInfo info = 
       new System.IO.FileInfo(project.FullName); 
       return info.Directory.FullName + "\\" + item.Name; 
      } 
      } 
      return ""; 
     } 
     else 
     { 
      return ProjectPathDefault+"web.config"; 
     } 
    } 

    public string GetDataDirectory(){ 
     EnvDTE.Project project=GetCurrentProject(); 
     if (project != null) 
     { 
      return System.IO.Path.GetDirectoryName(project.FileName)+"\\App_Data\\"; 
     } 
     else 
     { 
      return ProjectPathDefault+"App_Data\\"; 
     } 
    } 
... 

그런 다음 VS 외부 도구가 T4 도구 (도구를 설정하는 기능을 사용하여 -> 외부 도구) : 설정 이러한 속성 :

  • 제목 : T4
  • 명령 : C : \ Program 파일 \ 공용 Files \ Microsoft 공유 \ TextTemplating \ 1.2 \ TextTransform.exe
  • 인수 : $ (PROJECTDIR) \ 모델 Classes.tt
  • 초기 디렉토리 : \ $를 (PROJECTDIR)
  • 출력 창을 사용하십시오.프롬프트에 대해을 선택해야합니다.

확인을 클릭 한 다음 도구 -> 외부 도구 메뉴에서 새로 만든 도구를 실행하십시오.

+0

Hey ranomore, 해결책을 시도했지만 Message.tt (1,4) 메시지를받을 때마다 경고 메시지가 나타납니다. 템플릿에 여러 개의 템플릿 지시문이 있습니다. 첫 번째를 제외하고 모두 무시됩니다. 하나의 템플릿 지시문 내에서 템플릿 지시문에 대한 여러 매개 변수를 지정해야합니다. 아이디어가 있습니까? Settings.tt 파일을 살펴 보았습니다. 단 하나의 템플릿 지시문 만 있습니다. 미리 감사드립니다. – john84

+1

좋은 프로그래머는 모든 경고 메시지를 수정하지만이 경우에는 예외를 작성하는 것이 안전하다는 것을 알고 있습니다. 외부 파일에 포함 된 일부 파일에도 템플릿 지시문이 있습니다. T4는 찾은 첫 번째 템플릿 지시문 만 처리합니다. –

+0

나는 당신이 이것을 집어 들고 잘 작동 하는지를 알아 냈습니다. –

4

T4 템플릿은 VS Standard 이상에서만 실행된다는 것을 알았습니다. (한 번에 VS SDK에서 사용할 수 있다고 생각 했었습니다. 아마도 그것은 거기 :(당신이 사용할 수있는 명령 줄 TextTransform 도구가

2

: 그것은 C에 설치되어

[http://msdn.microsoft.com/en-us/library/bb126461.aspx][1]

을 기본적으로 익스프레스 버전에서 : \ 프로그램 파일 \ 공통 파일 \ Microsoft는 Shared \ TextTemplating \ 1.2

그러나 MVC 템플릿은 t4 템플릿을 Visual Studio 내에서 실행해야하므로 적어도 템플릿 패치가 없으면 템플릿을 사용할 수 없습니다.

+0

(시스템 요구 사항에 따라) Visual Studio 2008 Express Edition은 지원되지 않습니다. – SamWM

+0

예 및 설치 프로그램이 표준 이상으로 진행하지 못하도록합니다. 그러나 방금 Express를 다운로드하고 설치했으며 TextTransform 명령 줄 도구를 다음 경로에 추가했습니다. C : \ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.2 SDK가 없으므로 할 수 있어야합니다. . –

+2

Classes.tt에서 실행할 때 오류가 발생합니다. _SQLServer.tt (1,4) : 경고 : 템플릿에 여러 템플릿 지시문이 있습니다. 첫 번째를 제외하고 모두 무시됩니다. 하나의 템플릿 지시문 내에서 템플릿 지시문에 대한 여러 매개 변수를 지정해야합니다. – SamWM

관련 문제