我想在T4模板中使用System.Configuration程序集来获取项目的App.config中列出的连接字符串。但是,编译器似乎不接受语句块中的[]。这是怎么做到的?
<#@ assembly name="System.Configuration" #>
<#@ import namespace="System.Configuration"#>
<#
var connectionString = ConfigurationManager.ConnectionStrings["localconnection"].ConnectionString;
#>
TIA
答案 0 :(得分:1)
如果您在设计时运行T4(CustomTool:TextTemplatingFilePreprocessor),模板代码将作为VisualStudio流程的一部分执行。 VisualStudio正在加载devenv.exe.config而不是您的项目配置(您可以通过AppDomain.CurrentDomain.SetupInformation.ConfigurationFile进行检查)。
这就是为什么你得到空引用异常 - '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 =“true”才能使用Host解析项目文件夹。