C# 访问VS';VS扩展中预处理T4模板中的ITextTemplatingEngineHost

C# 访问VS';VS扩展中预处理T4模板中的ITextTemplatingEngineHost,c#,mef,t4,envdte,C#,Mef,T4,Envdte,我尝试了以下示例: 并试图找出如何重构以下现有代码,以便我们可以使用VS'ITextTemplatingEngineHost template.DatabaseObjectNameWithSchema = databaseObjectName; template.Database = database; template.Namespace = templateNamespace; template.Dialect = diale

我尝试了以下示例:

并试图找出如何重构以下现有代码,以便我们可以使用VS'ITextTemplatingEngineHost

        template.DatabaseObjectNameWithSchema = databaseObjectName;
        template.Database = database;
        template.Namespace = templateNamespace;
        template.Dialect = dialect;

        template.Host = ???

        return template.TransformText();
我可以获得模板服务和会话主机:

        ITextTemplating t4 = serviceProvider.GetService(typeof(STextTemplating)) as ITextTemplating;
        ITextTemplatingSessionHost sessionHost = t4 as ITextTemplatingSessionHost;

但是,我一辈子都无法解决如何获取引擎主机…

听起来您正在尝试获取此接口:ITextTemplatingEngineHost。如果是,您可以尝试以下代码:

STextTemplating vsHost = (STextTemplating)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(STextTemplating));
var vsHostEngine = vsHost as ITextTemplatingEngineHost;
要完全了解T4模板的工作原理,可以使用类似的工具查看源代码。在您的计算机上搜索名为Microsoft.VisualStudio.TextTemplating.VSHost.11.0.dll或类似文件,但不确定您使用的是哪个版本的visual studio。如果你在reflector中打开该文件并研究它,你应该能够找到你需要的任何答案