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



我想使用"EntityFramework反向POCO代码优先生成器",但在编程上不使用VS。EntityFramework反向POCO代码Github

事实上,我想从C#代码中运行T4为此,我下载了simple-t4引擎简单T4引擎

我写了一些这样的代码:

        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:IncludeFilesT4FilesDatabase.tt");
        string output = engine.ProcessTemplate(input, host);
        File.WriteAllText(@"D:IncludeFilesT4FilesOutput.txt", output);
        StringBuilder sb = new StringBuilder();
        foreach (CompilerError error in host.Errors)
        {
           sb.AppendLine(error.ToString());
        }
        File.WriteAllText(@"D:IncludeFilesT4FilesErrorLog.txt", sb.ToString());

但我有一些错误(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()

有人能帮我解决这个问题吗?或者引入更好的方式在运行时运行Database.tt并以编程方式在C#中执行。

数据库.tt

  • EF.Reverse.POCO.Core.Tinclude
  • EF.Reverse.POCO.包括
  • EF.Utility.CS.设置
  • EF6.实用性.CS.设置
  • 生成TSQL.Utility.tinclude

我是实体框架反向POCO生成器的作者。

很遗憾,您无法在Visual Studio之外运行此程序,因为代码依赖于它。EnvDTE为反向生成器提供了从Visual Studio项目添加/删除生成的文件的功能。如果没有这一点,它将无法完成自己的工作。

其他人询问他们是否可以在构建服务器上运行它。但是,构建服务器可能无法访问进行反向工程所需的数据库。因此,始终通过保存tt设置文件来生成代码,并将生成的代码提交给源代码管理,然后再提交给构建服务器。

顺便说一句:我不希望这个项目在VisualStudio之外实现自动化,也不希望包含在任何类型的其他产品中。这是许可证中规定的。

您可以使用TextTransform实用程序在Visual Studio之外转换T4文件。通常你可以在文件夹中找到util:

Program FilesCommon FilesMicrosoft SharedTextTemplating

我认为这是你的问题的一个开始,请研究更多关于这个工具的信息,并检查是否适合你的问题。

最新更新