Wenn Sie T4 zur Design-Zeit laufen (Custom: TextTemplatingFilePreprocessor), der Template-Code wird als Teil von Visual Studio-Prozess ausgeführt. VisualStudio lädt devenv.exe.config und nicht Ihre Projektkonfiguration (Sie können dies über AppDomain.CurrentDomain.SetupInformation.ConfigurationFile überprüfen).
Deshalb erhalten Sie null ref Ausnahme - 'localconnection' Verbindungszeichenfolge ist nicht in devenv.exe.config.
Sie können Ihre Projekt-Konfigurationsdatei mit ConfigurationManager.OpenMappedExeConfiguration laden:
<#@ 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);
#>
Hinweis, muss es hostspecific = „true“ sein, um Host zu verwenden Projektordner zu lösen.
Welchen Fehler bekommen Sie? – AlexP
Möglicherweise ein Duplikat von [how-to-make-Verbindungszeichenfolgen-in-a-t4-template verfügbar] (http://stackoverflow.com/questions/25460348/how-to-make-connection-strings-available) -in-a-t4-template) – AlexP
@AlexP Entschuldigung, dass Sie so lange brauchen, um zu antworten. Bei einigen Untersuchungen der tmp-Dateien stellt sich heraus, dass die Zeichenfolge [] korrekt kompiliert wurde, der Konfigurationsmanager jedoch die Verbindungszeichenfolge in der App.config des Projekts nicht sah - daher wurde "null" zurückgegeben. Durch das Durchlaufen aller Verbindungszeichenfolgen wird nur die Standardverbindungszeichenfolge machine.config gefunden, nicht die für das Konsolenprojekt. :(((VS 2015) Danke für jede Anleitung dazu. (Ich habe Ihren Link vor dem Schreiben dieser Frage angewendet und es hat nicht funktioniert :(). –