如何以编程方式运行EntityFramework反向POCO代码优先生成器(T4)?

Ham*_*thi 4 c# t4 templates entity-framework

我想使用"EntityFramework Reverse POCO Code First Generator",但程序上不是来自VS. EntityFramework反向POCO代码Github

事实上我想从C#代码为此运行T4我为此目的下载了简单的t4引擎 Simple T4 Engine

我写了一些像这样的代码:

        Engine engine = new Engine();
        TemplatingHost host = new TemplatingHost(System.Text.Encoding.UTF32);
        host.IncludeFileSearchPaths.Add(@"D:\IncludeFiles");

        string templateFileName = "some template";
        // NOTE: Doesn't actually seem to care about the name of the template file?  True, but does use the path to search for stuff.
        host.TemplateFile = templateFileName;
        string input = File.ReadAllText(@"D:\IncludeFiles\T4Files\Database.tt");
        string output = engine.ProcessTemplate(input, host);
        File.WriteAllText(@"D:\IncludeFiles\T4Files\Output.txt", output);

        StringBuilder sb = new StringBuilder();
        foreach (CompilerError error in host.Errors)
        {
           sb.AppendLine(error.ToString());
        }

        File.WriteAllText(@"D:\IncludeFiles\T4Files\ErrorLog.txt", sb.ToString());
Run Code Online (Sandbox Code Playgroud)

但是我遇到了一些错误(Output.txt为空)

ErrorLog.txt:

   error : Running transformation: System.InvalidCastException: Unable to cast transparent proxy to type 'System.IServiceProvider'.
   at Microsoft.VisualStudio.TextTemplating31A64EBEAB614B57E81A1789EC7637709A091834D5CA991E8A2195B15E2A0DFF588B0C98DCEDA8AD6902329A28B09556BDE2A9BEDFA48812CCC12CA1E68AA1C9.GeneratedTextTransformation.GetDTE()
   at Microsoft.VisualStudio.TextTemplating31A64EBEAB614B57E81A1789EC7637709A091834D5CA991E8A2195B15E2A0DFF588B0C98DCEDA8AD6902329A28B09556BDE2A9BEDFA48812CCC12CA1E68AA1C9.GeneratedTextTransformation.GetCurrentProject()
   at Microsoft.VisualStudio.TextTemplating31A64EBEAB614B57E81A1789EC7637709A091834D5CA991E8A2195B15E2A0DFF588B0C98DCEDA8AD6902329A28B09556BDE2A9BEDFA48812CCC12CA1E68AA1C9.GeneratedTextTransformation.GetConfigPaths()
   at Microsoft.VisualStudio.TextTemplating31A64EBEAB614B57E81A1789EC7637709A091834D5CA991E8A2195B15E2A0DFF588B0C98DCEDA8AD6902329A28B09556BDE2A9BEDFA48812CCC12CA1E68AA1C9.GeneratedTextTransformation.GetConnectionString(String& connectionStringName, String& providerName, String& configFilePath)
   at Microsoft.VisualStudio.TextTemplating31A64EBEAB614B57E81A1789EC7637709A091834D5CA991E8A2195B15E2A0DFF588B0C98DCEDA8AD6902329A28B09556BDE2A9BEDFA48812CCC12CA1E68AA1C9.GeneratedTextTransformation.InitConnectionString()
   at Microsoft.VisualStudio.TextTemplating31A64EBEAB614B57E81A1789EC7637709A091834D5CA991E8A2195B15E2A0DFF588B0C98DCEDA8AD6902329A28B09556BDE2A9BEDFA48812CCC12CA1E68AA1C9.GeneratedTextTransformation.GetDbProviderFactory()
   at Microsoft.VisualStudio.TextTemplating31A64EBEAB614B57E81A1789EC7637709A091834D5CA991E8A2195B15E2A0DFF588B0C98DCEDA8AD6902329A28B09556BDE2A9BEDFA48812CCC12CA1E68AA1C9.GeneratedTextTransformation.TransformText()
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题吗?或者引入一种更好的方法在运行时运行Database.tt以编程方式在C#中执行.

Database.tt

  • EF.Reverse.POCO.Core.ttinclude
  • EF.Reverse.POCO.ttinclude
  • EF.Utility.CS.ttinclude
  • EF6.Utility.CS.ttinclude
  • GenerateTSQL.Utility.ttinclude

Sim*_*hes 5

我是Entity Framework Reverse POCO Generator的作者.

不幸的是,你无法在Visual Studio之外运行它,因为代码依赖于它.EnvDTE使反向生成器能够从Visual Studio项目添加/删除生成的文件.没有它,它将无法完成它的工作.

其他人问他们是否可以在构建服务器上运行它.但是,构建服务器可能无法访问逆向工程所需的数据库.因此,始终通过保存tt设置文件生成代码,并将生成的代码提交到源代码控制,并从那里提交到构建服务器.

顺便说一句,要明确一点:我不希望这个项目在Visual Studio之外自动化,或者包含在任何类型的其他产品中.许可证中规定了这一点.

  • 虽然我很欣赏这个工具,但我对你关于许可的评论感到困惑。这是作为 Apache 2.0 分发的,它允许修改、派生、分发等。快速查看后,我没有看到许可证限制的提及,并且基于它是 Apache 2.0,我看不到任何可以阻止任何人删除阻止程序以实现自动化的内容这个实用程序。 (3认同)
  • ...在研究这个(非常简短)之后,您似乎已经在 APL 2.0(通过 VisualStudioGallery.com)和修改后的 APL 2.0(通过 GitHub)下发布了它。我的感觉是修改后的 APL 2.0 可能无效——Apache 通常不会让你在没有完全去品牌化的情况下更改他们的许可证(你不能在更改后声称它是 apache 许可证)。由于它通过 VS Gallery 作为库存 APL 2.0 分发,这些版本的插件显然允许修改和重新分发。 (2认同)
  • 是的,不幸的是,我认为您不能声称 Apache 2.0。您修改了许可证,因此它不再是 Apache 2 许可证。 (2认同)