在VS扩展中访问预处理T4模板中的VS'ITextTemplatingEngineHost

时间:2014-08-21 12:08:22

标签: c# mef t4 envdte

我试图效仿这个例子:

http://msdn.microsoft.com/en-us/library/gg586947.aspx

试图找出如何重构以下现有代码,以便我们可以使用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;

但是,我不能为我的生活找到如何获得引擎主机...

1 个答案:

答案 0 :(得分:1)

听起来你正试图获得这个界面:ITextTemplatingEngineHost。如果是这样,您可以尝试以下代码:

STextTemplating vsHost = (STextTemplating)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(STextTemplating));
var vsHostEngine = vsHost as ITextTemplatingEngineHost;

要完全了解T4模板的工作原理,您可以使用reflector之类的工具查看来源。在您的计算机上搜索名为Microsoft.VisualStudio.TextTemplating.VSHost.11.0.dll或类似内容的文件,不确定您正在使用的Visual Studio版本。如果您在反射器中打开该文件并进行研究,您应该能够找到所需的任何答案。