문제

텍스트 템플릿이 포함 된 AC# 프로젝트가 있습니다. 이 템플릿이 프로젝트의 C# 클래스에 대한 반영을 기반으로 일부 SQL을 생성하려고합니다.

T4를 사용하여 현재 프로젝트의 내용에 어떻게 액세스합니까? 가능하고, 그렇다면 반사가 가능합니까, 아니면 구문 분석 해야하는 원시 소스에 액세스 할 수 있습니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

T4를 사용하여 현재 프로젝트의 내용에 어떻게 액세스합니까?

한 가지 방법은 Envdte Com 구성 요소를 사용하는 것입니다. Googling T4와 Envdte는 많은 예를 가져와야합니다.

가능하고, 그렇다면 반사가 가능합니까, 아니면 구문 분석 해야하는 원시 소스에 액세스 할 수 있습니까?

반사는 T4에서 확실히 사용할 수 있습니다. 그것은 당신이 기대하는대로 주로 작동합니다.

올레그 시크 일반적인 T4 사용 시나리오와 관련하여 많은 훌륭한 블로그 항목이 있지만 T4에 대한 다른 리소스도 많이 있습니다.

다른 팁

잠금 문제 외에도 T4 템플릿 내에서 반사를 사용하여주의하십시오. VS2010의 템플릿 생성기는 프레임 워크의 버전 4.0에 대해 실행되므로 3.5 이하의 코드를 생성하는 경우 원치 않는 종속성을 소개 할 수 있습니다.

방금 반사를 사용하여 매개 변수가없는 호출을 생성할지 여부를 결정한 후 어려운 방법을 찾았습니다. ToString 다양한 BCL 유형의 경우. TimeSpan 전적으로 ToString() 2.0이지만 4.0은 추가됩니다 ToString(string) :피

이것은 잠금 문제를 해결하지는 않지만 (VS2010 이하라고 들었음에도 불구하고) DLL을 온도 위치로 복사하고 해당 복사 된 어셈블리를 사용할 수 있습니다.

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.IO" #>
<#    
var newFileName = System.IO.Path.GetTempFileName();
System.IO.File.Copy(@"C:\Development\CustomAssembly.dll",newFileName,true);

var assembly = Assembly.LoadFrom(newFileName);
var type = assembly.GetType("CustomAssembly.DummyClass");   
#>
<#=newFileName#>
<#=type#>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top