우리는 기본적으로 템플릿 내용에 대한 인수와 템플릿에 필요한 정보를 전달하여 코드 파일의 문자열 표현을 생성하고자하는 상황이 있습니다 자체 :Abstract (자동 컴파일 없음, 자동 파일 관리 없음)에서 T4 코드 생성
//*** PSEUDO CODE *** //
//loaded from an embedded resource file in a .dll. no physical file on file system
string templateContents = ...;
//has properties used by the template
object complexParameter = ...;
string generatedCode = generator.MakeCode(templateContents, complexParameter);
그러나 우리는 현재 우리가 원하는 것을하기 위해 T4 템플릿 생성을 시도하는 데 문제가 있습니다. 우리가 사용하는 실제 코드는 다음과 같습니다
var templatingEngine = new Engine();
//T4TextTemplateHost is our own class implementing ITextTemplatingEngineHost & IServiceProvider
var templateHost = new T4TextTemplateHost(references, imports)
{
Properties = parameters,
//this is supposed to be a file path? the generation bombs if this is left null
TemplateFile = "Dummy Value"
};
var templateContents = GetTemplateFileContents();
var retVal = templatingEngine.ProcessTemplate(templateContents, templateHost);
//if a CompilerError occurs, we get NO code, just a "ErrorGeneratingOutput" message
foreach (CompilerError error in templateHost.Errors)
//this information is pretty worthless: a compile error with line number for a
//non-existant code file
retVal += String.Format("{0}{2}Line: {1}{2}{2}", error.ErrorText,
error.Line, Environment.NewLine);
문제는 코드 생성기 어딘가에 실제 파일을 기대하는 것, 그리고 일이 잘못 갈 때, 우리는 쓸모없는 오류 메시지를 얻을, 우리가 코드를 얻을 수 없다는 것입니다 뒤로. 특히 생성 된 코드에 오류가있는 경우에는 코드를 자동으로 컴파일하지 않는 것이 좋습니다 (문제 해결시 전체 파일이 손상되지 않도록하려는 경우).
우리는 원하는대로 무엇이든 가져갈 수있는 문자열을 출력합니다.
T4 코드 생성을 의사 코드 예제와 유사하게 만들 수있는 방법이 있습니까? T4가 CodeSmith와 같은 것을 선호하여 T4 도구를 포기할 위기에 처했습니다. T4가 매우 제한적이며 템플릿 및 처리 출력을 관리하는 매우 구체적인 방법을 고려해야하기 때문입니다.
저는 CodeSmith에서 일하고 있으며 메모리 템플릿에서 지원합니다. 전체 .net 런타임에 액세스 할 수도 있습니다. 문의 사항이 있으시면 언제든지 문의하십시오. –
T4 템플릿을 계속 사용하려는 경우 변환 프로세스에서 생성 된 코드 파일을 볼 수있는 내 확장 기능 (T4 Awesome)에 기능을 추가했습니다. 이것은 디버깅에 도움이되며 변환 과정을 이해하는 데 도움이됩니다. [here] (https://www.t4awesome.com)에서 다운로드 할 수 있습니다. 이 기능은 Community Edition에서 사용할 수 있으므로 무료로 사용할 수 있습니다. – Frank
고마워요. 나는 CodeSmith로 끝나고 T4보다 훨씬 좋아 보인다. 메모리 요구 사항을 충족하는 것 외에도 큰 이점은 디자이너/인텔리 센스 지원이 더 우수하고 더 낫지 만 (철저히는 아니지만) 문서화 된 것입니다. 또한 질문에 대답하고 도움을 줄 수있는 반응적인 지원이 있습니다. – Colin