gpt4 book ai didi

c# - 如何使连接字符串在 T4 模板中可用?

转载 作者:可可西里 更新时间:2023-11-01 09:05:12 27 4
gpt4 key购买 nike

我编写了一个 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;

最佳答案

我通过以下方式从 T4 模板的 App.config 访问连接字符串:

<#@ template debug="false" hostspecific="true" language="C#" #>

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(this.Host.ResolvePath(@"..\ProjName\App.config"));
configFileMap.ExeConfigFilename = this.Host.ResolvePath(@"..\ProjName\App.config");
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
string connectionString = config.ConnectionStrings.ConnectionStrings[0].ConnectionString;

关于c# - 如何使连接字符串在 T4 模板中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460348/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com