我编写了一个T4模板,在其中实例化了一个EF上下文以读取一些数据。问题在于,上下文无法看到来自Web.config的连接字符串。
我该如何使Web.config中的连接字符串在模板中可用?
更多信息:
- 模板是从头开始编写的
- EF edmx位于另一个项目中
- 我在模板中进行的第一个查询告诉我,它无法在模板所在的项目中找到所需的连接字符串
尝试了下面一些解决方案(谢谢),但我得到了这个:
Error 2 Compiling transformation: 'Microsoft.VisualStudio.TextTemplating12165CB53B43A726CBA54A29800255D257AAFD4D5F0DACE4DFE5872F2DEC7739EDF358F49C0444A912B851939903A79BC6180FCEB3FD0D1BF8C0093741DDDACA.GeneratedTextTransformation' does not contain a definition for 'Host' and no extension method 'Host' accepting a first argument of type 'Microsoft.VisualStudio.TextTemplating12165CB53B43A726CBA54A29800255D257AAFD4D5F0DACE4DFE5872F2DEC7739EDF358F49C0444A912B851939903A79BC6180FCEB3FD0D1BF8C0093741DDDACA.GeneratedTextTransformation' could be found (are you missing a using directive or an assembly reference?)
我有以下声明:
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
如果我包含Microsoft.VisualStudio.TextTemplating的程序集,它会告诉我它已经被插入了。
此外,是否有办法使ConfigurationManager对DbContext可用,以便他可以在幕后读取任何他想要的内容,而无需我传递连接字符串给他?
问题已解决,再次感谢:
<#@ template hostspecific="true" language="C#" debug="false" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Configuration" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#@ import namespace="System.Configuration" #>
var map = new ExeConfigurationFileMap();
map.ExeConfigFilename = this.Host.ResolvePath(@"..\Web.config");
var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
var connectionString = config.ConnectionStrings.ConnectionStrings["MyConnectionName"].ConnectionString;
Compiling transformation: 'ConfigurationElement.this[ConfigurationProperty]' is inaccessible due to its protection
,并且在网上找不到好的解决方案。 - Matthew BeckExeConfigurationFileMap
的空构造函数之前,这个方法对我来说一直失败,代码如下:var configFileMap = new ExeConfigurationFileMap();
- qujckrefconfig.AppSettings.Settings["key_name"].Value
修复了与AppSettings
相关的问题。尝试使用相同的方法解决ConnectionStrings
的问题。另外,也可以尝试使用ConfigurationUserLevel.PerUserRoaming
。 - Brains