2016-04-06 23 views
4

Ich möchte "EntityFramework Reverse POCO Code ersten Generator" aber programmgesteuert nicht von VS. EntityFramework Reverse POCO Code GithubWie kann ich EntityFramework Reverse POCO-Code ersten Generator (T4) programmgesteuert ausführen?

In der Tat möchte ich zu diesem Zweck T4 Ausführen von C# -Code ich heruntergeladen einfach T4-Motor für diesen Zweck Simple T4 Engine

ich einige Code wie folgt geschrieben:

 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()); 

Aber ich habe ein paar Fehler (Output.txt ist leer)

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() 

Kann jemand mir helfen, dieses Problem zu lösen? oder führen Sie einen besseren Weg für Lauf Database.tt in Laufzeit ein Ausführen in C# programmgesteuert.

Database.tt

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

Antwort

5

Ich bin der Autor des Entity Framework Reverse POCO Generator.

Leider können Sie dies außerhalb von Visual Studio nicht ausführen, da der Code davon abhängt. Das EnvDTE bietet die Möglichkeit für den umgekehrten Generator, generierte Dateien aus dem Visual Studio-Projekt hinzuzufügen/zu entfernen. Ohne dies wird es nicht in der Lage sein, seinen Job zu machen.

Andere haben gefragt, ob sie es auf dem Build-Server ausführen können. Der Build-Server hat jedoch möglicherweise keinen Zugriff auf die Datenbank, die er zum Reverse-Engineering benötigt. Generieren Sie den Code also immer, indem Sie die TT-Einstellungsdatei speichern und den generierten Code an die Quellcodeverwaltung und von dort an den Build-Server übergeben.

Übrigens, um es klar zu stellen: Ich möchte nicht, dass dieses Projekt außerhalb von Visual Studio automatisiert oder in ein anderes Produkt aufgenommen wird. Dies ist in der Lizenz festgelegt.

+1

Während ich das Tool zu schätzen wissen, bin ich verwirrt über Ihre Kommentare zur Lizenzierung. Dies wird als Apache 2.0 verteilt, was eine Modifikation, Ableitung, Verteilung usw. ermöglicht. Nach einer kurzen Überprüfung sehe ich keine Lizenzbeschränkungen und basierend darauf, dass es sich um Apache 2.0 handelt, sehe ich nichts daran, dass jemand die Blocker für die Automatisierung entfernt dieses Dienstprogramm. – STW

+1

... nachdem wir dies (sehr kurz) untersucht haben, scheint es, dass Sie dies sowohl unter APL 2.0 (via VisualStudioGallery.com) als auch über eine modifizierte APL 2.0 (via GitHub) veröffentlicht haben. Meines Erachtens ist die modifizierte APL 2.0 wahrscheinlich nicht gültig - Apache erlaubt normalerweise nicht, dass Sie ihre Lizenzen ändern, ohne vollständig zu debandieren (Sie können nicht behaupten, dass es eine Apache-Lizenz ist, nachdem Sie sie geändert haben). Da es als Bestands-APL 2.0 über die VS Gallery vertrieben wird, ermöglichen diese Versionen des Plugins eine Modifikation und Neuverteilung. – STW

+1

Ja, leider glaube ich nicht, dass Sie Apache 2.0 beanspruchen können. Sie haben die Lizenz geändert, es handelt sich also nicht mehr um eine Apache 2-Lizenz. –

-1

Sie können TextTransform Utility verwenden, um T4-Dateien außerhalb von Visual Studio zu transformieren. Normalerweise können Sie util in Ordnern:

\Program Files\Common Files\Microsoft Shared\TextTemplating\ 

Ich denke, das ein Anfang für Ihr Problem ist, bitte mehr über dieses Werkzeug erforschen und prüfen Sie, ob Ihr Problem passen.

+0

das Problem ist, dass diese T4-Datei explizit von der DTE-Umgebung von Visual Studio abhängt. Während also viele/die meisten einfach außerhalb von Visual Studio ausgeführt werden können, kann dieser bestimmte nicht. – STW