如果你正在運行在設計時T4(CustomTool:TextTemplatingFilePreprocessor),模板代碼被作爲VisualStudio的進程的一部分執行。 VisualStudio加載devenv.exe.config而不是你的項目配置(你可以通過AppDomain.CurrentDomain.SetupInformation.ConfigurationFile來檢查)。
這就是爲什麼你會得到null ref異常 - '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);
#>
注意,它必須是爲了使用主機解決您的項目文件夾hostspecific =「真」。
你會得到什麼錯誤? – AlexP
可能是[如何使連接字符串可用在一個t4模板](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)感謝您對此的任何指導(我已經在寫這個問題之前應用了您的鏈接,但它沒有工作:()。 –