Visual Studio Automation에서 제공하는 CodeModel을 기반으로 코드 사전 빌드를 생성하는 방법이 있습니다. 프로젝트 인터페이스에는 해당 프로젝트의 모든 모델 아티팩트 그래프가 들어있는 속성 "CodeModel"이 있습니다. 출력 코드를 생성하는 클래스, 인터페이스, 속성 등을 찾기 위해 트래버스 할 수 있습니다.
dandrejw는 이미 Tangible T4-Editor을 언급했다. 무료 템플릿 갤러리가 있습니다. 재사용 가능한 템플릿 인 "유형의 Visual Studio 자동화 도우미"가 있으므로 귀하의 경우에 매우 유용합니다. 이 템플릿을 사용하면 다음과 같이 문제를 해결할 수 있습니다.
이것은 INotifyPropertyChanged를 구현하는 모든 클래스를 탐지하는 t4 템플릿 내의 코드입니다.
<#
// get a reference to the project of this t4 template
var project = VisualStudioHelper.CurrentProject;
// get all class items from the code model
var allClasses = VisualStudioHelper.GetAllCodeElementsOfType(project.CodeModel.CodeElements, EnvDTE.vsCMElement.vsCMElementClass, false);
// iterate all classes
foreach(EnvDTE.CodeClass codeClass in allClasses)
{
// get all interfaces implemented by this class
var allInterfaces = VisualStudioHelper.GetAllCodeElementsOfType(codeClass.ImplementedInterfaces, EnvDTE.vsCMElement.vsCMElementInterface, true);
if (allInterfaces.OfType<EnvDTE.CodeInterface>()
.Any(i => i.Name == "INotifyPropertyChanged"))
{
#>Render your code here<#
}
}
#>
코드 스 니펫에 "여기에 코드 렌더링"이라고 표시된 곳의 출력 코드를 입력하십시오.
템플릿과 클래스가 같은 프로젝트에 있습니까? 나는 단지 짐작하고 있지만 다른 프로젝트에 있다면 순서를 더 잘 제어 할 수 있으므로 다른 컴파일 후에 컴파일 할 수 있습니다. – Kobi
그래, 나도 그렇게 생각했지만, 빌드를 멈추고, t4를 실행하고, 일시 중지를 해제 할 수있는 방법이 없으면, 하나씩 프로젝트를 빌드해야합니다. – Alwyn
템플릿 생성이 [빌드 프로세스의 코드 생성] (http://msdn.microsoft.com/en-us/library/ee847423.aspx)의 경우 빌드를 중지 할 필요가 없습니다. 나는 실제로 그것을 한 적이 없으며 템플릿 엔진이 어느 컨텍스트에서 실행되는지는 확실하지 않지만 작동 할 수있는 것처럼 보입니다. – Kobi