T4 模板语句块中方括号的语法
Syntax for square brackets in a T4 Template statement block
我想在 T4 模板中使用 System.Configuration 程序集来获取项目 App.config 中列出的连接字符串。但是,编译器似乎不接受语句块中的 [ ]。这是怎么做到的?
<#@ assembly name="System.Configuration" #>
<#@ import namespace="System.Configuration"#>
<#
var connectionString = ConfigurationManager.ConnectionStrings["localconnection"].ConnectionString;
#>
TIA
如果您在设计时 运行 T4(自定义工具: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 解析您的项目文件夹。
我想在 T4 模板中使用 System.Configuration 程序集来获取项目 App.config 中列出的连接字符串。但是,编译器似乎不接受语句块中的 [ ]。这是怎么做到的?
<#@ assembly name="System.Configuration" #>
<#@ import namespace="System.Configuration"#>
<#
var connectionString = ConfigurationManager.ConnectionStrings["localconnection"].ConnectionString;
#>
TIA
如果您在设计时 运行 T4(自定义工具: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 解析您的项目文件夹。