2010-01-31 5 views
5

웹 응용 프로그램에서 참조하는 다른 어셈블리에있는 T4 템플릿에서 웹 응용 프로그램의 연결 문자열을 읽을 수있는 좋은 예제 나 도우미 클래스가 있습니까? 데이터베이스에서 참조하는 일부 코드를 생성하고 있는데이 사용을 위해 연결 문자열을 얻는 방법에 대한 도움이 필요합니다. ive 조지 Js 예제 here을 읽을 수 있지만 템플릿이 웹 응용 프로그램에있을 때만 작동합니다.t4를 사용하여 다른 어셈블리에서 web.config 읽기

+0

를 사용할 수 있습니다 내가 시나리오를 이해 .. 당신은 웹 애플 리케이션을 가지고. 수정할 수 있지만 별도의 참조 된 어셈블리로 컴파일 된 템플릿이 있습니다. 변환을 실행할 때 참조하는 웹 응용 프로그램의 web.config를 읽을 수 있기를 원하십니까? 두 번째 세부 사항 필요 : 어떻게 템플릿을 실행하고 있습니까? 대화 형으로 VS 또는 프로그래밍 방식으로 @ 런타임? 이러한 질문을 명확히 할 수 있다면 간단한 해결책이 있어야한다고 확신합니다. –

+0

당신이 자리하고 있습니다. 템플릿은 실제 웹 응용 프로그램이 아닌 다른 참조 된 어셈블리에 있습니다. 처음에는 질문에 대답하기 만하면 디자인 타임에 대화식으로 실행할 수 있습니다. 우리는 통합 된 빌드를 조사하고 있습니다. 우리는 svn을 실행 중입니다. 그리고 템플릿 연결 문자열의 지속적인 수정은 우리를 능숙하게 만듭니다 (db는 app_data 폴더에 있습니다). 메신저 app_data 폴더에 상대 경로 (또는 절대)를 사용하여 파일 자체에서 얻을 db를 참조하는 방법을 찾고. –

답변

3
var path = Host.ResolvePath(@"../Web.config"); 
var map = new ExeConfigurationFileMap { ExeConfigFilename = path };   
var config = ConfigurationManager.OpenMappedExeConfiguration(
              map,ConfigurationUserLevel.None); 
var appSettings = config.AppSettings; 
var connectionStrings = config.ConnectionStrings.ConnectionStrings; 
1

당신은 그런 식으로 뭔가를 시도 할 수 :

var config = ConfigurationManager.OpenExeConfiguration("../somePathTo/web.config") 
// use the config to get values like: config.AppSettings 
+0

안녕하세요, t4 템플릿은 사용자 지정 도구로 실행되므로 상대 경로는 프로젝트가 아닌 도구의 컨텍스트 에서처럼 작동하지 않습니다. –

+0

Assembly를 호출하면 sth를 수행 할 수 있습니다. (사용자 정의 Tool이 API 호출을 사용하여 T4를 수행하는 경우에만 작동합니다. 사용자 지정 도구가 일부 유형의 경로 매개 변수를 제공하거나 경로 정보를 일종의 공유 데이터 저장소에 쓸 수 있습니다. (excecuting 디렉토리의 XML 파일)? 자세한 정보를 얻는 것이 좋을 것입니다. – Robert

+0

위 코드는 <# = System.Reflection.Assembly.GetCallingAssembly(). CodeBase #> file : /// C : /Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio를 호출 한 결과입니다. TextTemplating.10.0/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.TextTemplating.10.0.dll –

0

을 T4에서 필자 주위에 내 대답을 발견 검색 조금 후에 그래서 저 같은 경우 보자 하나

path = Host.ResolvePath(relativeFileName) 
관련 문제