当前位置: 首页 > 编程语言 > C#

如何在T4模板中提供连接字符串?分享

时间:2023-04-11 02:43:19 C#

T4模板中如何提供连接字符串?我编写了一个T4模板,我在其中实例化了一个EF上下文来读取一些数据。问题是上下文看不到来自Web.config的连接字符串。HowdoImaketheconnectionstringinWeb.configavailabletotemplates?更多信息:尝试了下面的一些解决方案(谢谢),但我明白了:Error2Compilingtransformation:'Microsoft.VisualStudio.TextTemplating12165CB53B43A726CBA54A29800255D257AAFD4D5F0DACE4DFE5872F2DEC7739EDF358F49C0444A912B851939903A79BC6180FCEB3FD0D1BF8C0093741DDDACA.GeneratedTextTransformation'doesnotcontainadefinitionfor'Host'andnoextensionmethod'Host'acceptingafirstargumentoftype'Microsoft.VisualStudio.TextTemplating12165CB53B43A726CBA54A29800255D257AAFD4D5F0DACE4DFE5872F2DEC7739EDF358F49C0444A912B851939903A79BC6180FCEB3FD0D1BF8C0093741DDDACA.GeneratedTextTransformation'couldbefound(areyoumissingausingdirectiveoranassemblyreference?)我声明了以下内容:如果我包含Microsoft.VisualStudio.TextTemplating的程序集,它会告诉我它已插入。另外,有没有办法让ConfigurationManager对DbContext可用,这样他就可以在后台读取他想要的内容而无需我传递连接字符串?解决了,再次感谢:varmap=newExeConfigurationFileMap();map.ExeConfigFilename=this.Host.ResolvePath(@"..Web.config");varconfig=ConfigurationManager.OpenMappedExeConfiguration(map,ConfigurationUserLevel.None);varconnectionString=config.ConnectionStrings.ConnectionStrings["MyConnectionName"].ConnectionString;我通过以下方式从T4模板访问App.config中的连接字符串:ExeConfigurationFileMapconfigFileMap=newExeConfigurationFileMap(this.Host.ResolvePath(@"..ProjNameApp.config"));configFileMap.ExeConfigFilename=this.Host.ResolvePath(@"..ProjNameApp.config");配置config=ConfigurationManager.OpenMappedExeConfiguration(configFileMap,ConfigurationUserLevel.None);字符串connectionString=config.ConnectionStrings.ConnectionStrings[0].ConnectionString;将Web.Config连接字符串注入T4模板将为您提供一个从Web.config和app.config读取连接字符串的T4模板。我基于它创建了我的自定义版本,它为我节省了很多时间。以上是C#学习教程:如何在T4模板中提供连接字符串?如果分享的所有内容对你有用,需要了解更多C#学习教程,希望你多多关注——///提供对宿主EnvDTE.Project和app.config/web的强类型访问。config///配置文件,如果存在的话。//////来自T4模板的典型用法:///ConfigurationAccessorconfig=newConfigurationAccessor((IServiceProvider)this.Host);/////////SkySanders[sky.sanders@gmail.com,http://skysanders.net/subtext]///01-23-10///此文件的内容属于公共领域奉献精神。//////TODO:确定ProjectItem的行为。引用链接文件时的文件名。///publicclassConfigurationAccessor{//////来自T4模板的典型用法:///ConfigurationAccessorconfig=newConfigurationAccessor((IServiceProvider)this.Host);///publicConfigurationAccessor(IServiceProviderhost):this(host,null){}//////与默认构造函数相同,但它在传递的配置中查找web.config/app.config///项目位置n而不是在它找到的第一个启动项目中。传递的configProjectLocation///应该是相对于解决方案文件的。///publicConfigurationAccessor(IServiceProviderhost,stringconfigProjectLocation){//获取托管调用文件的VisualStudio实例EnvDTE.DTEenv=(EnvDTE.DTE)host.GetService(typeof(EnvDTE.DTE));//初始化配置文件名stringconfigurationFilename=null;//获取当前选定项目的数组。由于您要么在此文件中保存它,要么//右键单击??解决方案资源管理器中的项目以调用上下文菜单,因此有理由//有1个ActiveSolutionProject并且它是该文件的父项...._project=(EnvDTE.Project)((Array)env.ActiveSolutionProjects).GetValue(0);//尝试在活动解决方案项目中找到配置文件configurationFilename=FindConfigurationFilename(_project);//如果我们没有找到配置文件,检查startupprojectorpassedconfig//projectlocationintheconstructorif(configurationFilename==null){//我们将在解决方案中获取第一个*STARTUP*项目//我们的启动项目也应该有一个有效的web.config/app.config,但是,//如果由于某种原因我们在解决方案中有多个启动项目,这//将只获取它找到的第一个////我们还可以提供一个配置项目位置以在其中查找构造函数。这解决了//我们有多个启动项目并且此文件不在第一个的情况下的问题,或者配置文件不在启动项目或活动解决方案中的//项目。如果(!string.IsNullOrEmpty(configProjectLocation)){_project=(EnvDTE.Project)env.Solution.Projects.Item(configProjectLocation);}else{foreach(Stringsin(Array)env.Solution.SolutionBuild.StartupProjects){_project=(EnvDTE.Project)env.Solution.Projects.Item(s);休息;}}//尝试并在我们找到的其中一个项目中找到配置文件configurationFilename=FindConfigurationFilename(_project);}//如果我们有配置文件名,则返回配置对象//如果我们没有配置文件名,则抛出异常if(!string.IsNullOrEmpty(configurationFilename)){//找到它,映射它并暴露突出成员作为属性ExeConfigurationFileMapconfigFile=null;配置文件=新的ExeConfigurationFileMap();configFile.ExeConfigFilename=配置文件名;_configuration=System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(configFile,ConfigurationUserLevel.None);}else{thrownewArgumentException("无法找到配置文件(web.config/app.config)。如果配置文件位于不同的项目中,则必须将该项目标记为启动项目或传递项目位置相对于解决方案文件的配置文件。”);}}//////找到一个w传递的项目中的eb.config/app.config文件并返回文件名。///如果没有找到,则返回null。///privatestringFindConfigurationFilename(EnvDTE.Projectproject){//检查每个项目项的文件名以查找app.config或web.configforeach(EnvDTE.ProjectItemiteminproject.ProjectItems){if(Regex.IsMatch(item.Name,,"(app|web).config",RegexOptions.IgnoreCase)){//TODO:用链接文件试试这个。文件名指向源吗?返回item.get_FileNames(0);}}//没有找到,返回nullreturnnull;私人EnvDTE.Project_project;私人System.Configuration.Configuration_configuration;//////提供对宿主项目的访问。//////请参阅http://msdn.microsoft.com/en-us/library/envdte.project.aspxpublicEnvDTE.ProjectProject{get{return_project;}}//////Project.Properties的便捷getter。///示例:///stringthisAssemblyName=config.Properties.Item("AssemblyName").Value.ToString();///stringthisAssemblyName=config.Properties.Item("AssemblyName").Value.ToString();//////参见http://msdn.microsoft.com/en-us/library/envdte.project_properties.aspxpublicEnvDTE.PropertiesProperties{get{return_project.Properties;}}//////提供访问应用程序/网络配置文件。//////请参阅http://msdn.microsoft.com/en-us/library/system.configuration.configuration.aspxpublicSystem.Configuration.ConfigurationConfiguration{get{return_configuration;}}//////提供对配置文件的appSettings部分的访问。///行为不同于典型的AppSettings用法,因为索引的///项目的.Value必须显式处理。///字符串设置=config.AppSettings["MyAppSetting"].Value;//////请参阅http://msdn.microsoft.com/en-us/library/system.configuration.configuration.appsettings.aspxpublicKeyValueConfigurationCollectionAppSettings{get{return_configuration.AppSettings.Settings;}}//////提供对配置文件的connectionStrings部分的访问。///行为符合预期;项目通过字符串键或整数索引访问。///字符串northwindProvider=config.ConnectionStrings["northwind"].ProviderName;//////请参阅http://msdn.microsoft.com/en-us/library/system.configuration.configuration.connectionstrings.aspxpublicConnectionStringSettingsCollectionConnectionStrings{get{return_configuration.ConnectionStrings.ConnectionStrings;}}}#>本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: