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



我试着遵循这个例子:

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;

然而,我不能为我的生活工作如何获得引擎主机…

这听起来像你试图得到这个接口:ITextTemplatingEngineHost。如果是这样,可以试试下面的代码:

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

要完全理解T4模板是如何工作的,您可以使用反射器等工具并查看源代码。在你的机器上搜索一个名为microsoft . visualstudio . texttemplate . vshost .11.0.dll或类似的文件,不确定你使用的是哪个版本的visualstudio。如果你在reflector中打开这个文件并研究它,你应该可以找到你需要的任何答案。

最新更新