문제

Visual Web Developer Express 2008에서 Subsonic ASP.NET MVC 템플릿은 추가 된 새로운 데이터베이스에서 작동하지 않는 것 같습니다. Chinook 데이터베이스를 제거하고 내 자신의 데이터베이스를 만들었습니다. 모델 폴더의 .tt 파일은 코드를 생성하는 데 사용되지만 (ConnectionStringName을 Web.config에서 설정 한 것으로 변경 했음에도 불구하고) 이해하지 못합니다.

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

Cannot find custom tool 'TextTemplatingFileGenerator' on this system.

그 도구는 어디에 보관되어 있습니까? CodetemPlates에는 .tt 파일이 있으며 새 컨트롤러 또는보기를 만들 때 사용되는 파일이 있으므로이를 수행하는 도구가 있다고 가정합니다.

도움이 되었습니까?

해결책

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

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 Common Files Microsoft 공유 TextTemplating 1.2 TextTransform.exe
  • 인수 : $ (ProjectDir) Models Classes.tt
  • 초기 디렉토리 : $ (projectdir)
  • 출력 창을 사용하십시오 그리고 인수를 자랑스럽게 생각합니다 확인해야합니다.

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

다른 팁

T4 템플릿은 표준 이상에서만 실행된다는 것이 밝혀졌습니다. (

사용할 수있는 명령 줄 텍스트 변환 도구가 있습니다.

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

Express 버전에서 기본적으로 C : Program Files Common Files Microsoft 공유 TextTemplating 1.2에 설치됩니다.

그러나 MVC 템플릿은 T4 템플릿을 Visual Studio 내에서 실행해야하므로 템플릿에 대한 패치가 없으면 작동하지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top