디자인 타임에 T4 실행하는 경우 (CustomTool : TextTemplatingFilePreprocessor)는, 템플릿 코드으로 VisualStudio 프로세스의 일부로 실행됩니다. VisualStudio는 프로젝트 구성이 아니라 devenv.exe.config를로드합니다 (AppDomain.CurrentDomain.SetupInformation.ConfigurationFile을 통해 확인할 수 있음).
그래서 null 참조 예외가 발생합니다. 'localconnection'연결 문자열은 devenv.exe.config에 없습니다.
당신은 ConfigurationManager.OpenMappedExeConfiguration를 사용하여 프로젝트 설정 파일을로드 할 수
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Configuration" #>
<#@ import namespace="System.Configuration"#>
<#@ import namespace="System.IO" #>
<#
string configPath = Path.Combine(Host.ResolveAssemblyReference("$(ProjectDir)"), "App.config");
var configFileMap = new ExeConfigurationFileMap{ExeConfigFilename = configPath};
var config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
string connectionString = config.ConnectionStrings.ConnectionStrings["localconnection"].ConnectionString;
WriteLine(connectionString);
#>
참고, 그것은 당신의 프로젝트 폴더를 해결하기 위해 호스트를 사용하려면 = "true"를 hostspecific해야합니다.
어떤 오류가 발생합니까? – AlexP
[how-to-make-connection-strings-t4-template에서 사용할 수있는] 복제본 (http://stackoverflow.com/questions/25460348/how-to-make-connection-strings-available) -in-a-t4-template) – AlexP
@AlexP 너무 오랫동안 회신 해 주셔서 죄송합니다. tmp 파일에 대해 조사한 결과, [] 문자열이 올바르게 컴파일되었지만 구성 관리자가 프로젝트의 App.config에서 연결 문자열을 보지 못하고 "null"이 반환되었습니다. 모든 연결 문자열을 반복하면 콘솔 프로젝트와 관련된 기본 machine.config 연결 문자열 만 발견됩니다. :((VS 2015) 이것에 대한 지침을 주셔서 감사합니다. (이 질문을 작성하기 전에 귀하의 링크를 적용했지만 작동하지 않습니다 :(). –