2016-07-23 10 views
0

Ich möchte die Assembly System.Configuration innerhalb einer T4-Vorlage verwenden, um die Verbindungszeichenfolge in der App.config des Projekts anzuzeigen. Der Compiler scheint jedoch das [] im Anweisungsblock nicht zu akzeptieren. Wie wird das gemacht?Syntax für eckige Klammern in einem T4 Template-Anweisungsblock

<#@ assembly name="System.Configuration" #> 
<#@ import namespace="System.Configuration"#> 

<# 

    var connectionString = ConfigurationManager.ConnectionStrings["localconnection"].ConnectionString; 

#> 

TIA

+0

Welchen Fehler bekommen Sie? – AlexP

+0

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

+0

@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 :(). –

Antwort

1

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.

Verwandte Themen