【问题标题】:Accessing VS' ITextTemplatingEngineHost in Preprocessed T4 Template in a VS Extension在 VS 扩展中的预处理 T4 模板中访问 VS 的 ITextTemplatingEngineHost
【发布时间】:2014-08-21 12:08:22
【问题描述】:

我尝试过这个例子:

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;

但是,我终其一生都无法弄清楚如何获得引擎主机...

【问题讨论】:

    标签: c# mef t4 envdte


    【解决方案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。如果您在反射器中打开该文件并研究它,您应该能够找到您需要的任何答案。

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多