Subsonic ASP.NET MVC Visual Web Developer Express의 샘플
-
16-09-2019 - |
문제
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 내에서 실행해야하므로 템플릿에 대한 패치가 없으면 작동하지 않을 것입니다.