2011-02-10 3 views
16

Visual Studio 2010에서 T4를 사용하고 있으며 솔루션에서 파일을 반복하고 싶지만 T4 소스 생성이 일종의 샌드 박스에서 작동하며 현재 작업 디렉토리는 프로그램 파일의 Visual Studio 10 디렉토리 안에 있습니다.T4 솔루션의 현재 작업 디렉토리 가져 오기

T4 파일을 상대적인 방법으로 참조하여 빌드를 손상시키지 않거나 동일한 파일 구조가없는 다른 일부 상자에서 작동하는 방법이 있습니까?

감사

답변

26

은 당신과 같이 true로 hostspecific 속성을 설정해야합니다

<#@ template language="C#" hostspecific="True" #> 

ITextTemplatingEngineHost 인터페이스는 당신이 필요로하는 정보를 제공 할 것입니다.

<#= this.Host.ResolveParameterValue("-", "-", "projects") #> 

내가 솔루션을 참조하는 방법이 생각하지 않지만, 당신이 당신의 *.tt 파일이 거기에서 다른 파일을 얻을 수있는 경로를 얻을 수 있습니다.

텍스트 템플릿에 상대적인 위치에서 파일을로드하려면, 당신은이를 사용할 수 있습니다

public string GetSolutionDirectory() 
{ 
    var serviceProvider = this.Host as IServiceProvider; 
    var dte = serviceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE; 
    return System.IO.Path.GetDirectoryName(dte.Solution.FullName); 
} 
+2

Thanks Shiv! 나는이 템플릿을 사용하여 끝냈다 .Host.TemplateFile은 템플릿을 직접 가리키며 거기에서부터 실행되었다. – aceinthehole

+0

@aceinthehole, 의견에 감사드립니다! –

+2

DTE를로드하여 솔루션을 직접 얻을 수 있습니다. http://stackoverflow.com/questions/12952110/accessing-projects-via-dte-in-c-sharp-t4-template –

9

이 내가 솔루션의 기본 디렉토리를 얻기 위해 사용하는 방법은 XML 파일을 생성하는 T4 템플릿에서 제공되는 JCallico 로직을 사용하는 방법 :

XML att ribute "filePath"는 Visual Studio의 솔루션 디렉토리와 "\ MySubfolder \ MyFile.exe"를 더한 값입니다.

4

은 다음과 같습니다

this.Host.ResolvePath("relative/path.txt") 
관련 문제