T4模板语句块中方括号的语法

艾伦·韦恩

我想在T4模板中使用System.Configuration程序集来获取项目的App.config中列出的连接字符串。但是,编译器似乎未在语句块中接受[]。这是怎么做的?

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

<#

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

#>

TIA

亚历克斯

如果您在设计时运行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 =“ true”才能使用Host来解析您的项目文件夹。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章