Question

Je suis en utilisant SubSonic 3 (mode ActiveRecord) pour générer le code pour mon DAL. Il utilise des modèles T4 (.tt) Les fichiers dès que vous enregistrez, générer le code pour vous.

Je veux automatiser cette partie de mon build NANT, mais je ne peux pas obtenir ce travail. Je sais que MS fournir un outil appelé TextTransform pour générer le code à partir de modèles T4, mais dans le cas des modèles SubSonic cela ne semble pas travailler - Je pense que les modèles font des hypothèses sur le modèle en cours d'exécution à partir de Visual Studio, qui ne semble pas fonctionner à partir de la ligne de commande. L'erreur que je reçois lorsque je tente de le lancer contre ActiveRecord.tt est:

subsonique \ ActiveRecord.tt (0,0): Erreur: transformation du film: System.InvalidCastException: impossible à jeter objet de type 'Microsoft.VisualStudio.TextTemplating.CommandLine.CommandLineHost' de type 'System.IServiceProvider.    à Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.GetCurrentProject () dans c: \ Users \ matt.roberts \ AppData \ Loc al \ Temp \ subsonique \ Settings.ttinclude: ligne 103    à Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.GetConnectionString (String connectionStringName) à c: \ U SERS \ matt.roberts \ AppData \ Local \ Temp \ subsonique \ Settings.ttinclude: ligne 51    à Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.get_ConnectionString () dans c: \ Users \ matt.roberts \ AppData \ Temp \ Local \ subsonique \ Settings.ttinclude: ligne 87

Quelqu'un at-il réussi à automatiser cette génération?

Merci

Matt.

Était-ce utile?

La solution

J'ai écrit une entrée de blog qui couvre ce terrain quelque peu:

options pour l'exécution des modèles T4 à partir. Code NET

Pour faire ce que vous essayez de faire, il faudra une intervention chirurgicale sur les modèles SubSonic T4. Plus précisément, vous devrez (minimum) remplacer toutes les références à EnvDTE.DTE avec quelque chose qui ne nécessite pas de Visual Studio pour exécuter. Cela peut être aussi simple que des informations coder en dur des chemins et / ou configuration dans vos modèles T4 si vous voulez juste « faire fonctionner ».

Il est important de se rappeler que les modèles T4 sont un peu mince enveloppe autour du code .NET. Si vous pouvez le faire à partir de .NET, vous pouvez très probablement faire de T4, il vous suffit de comprendre comment travailler au sein des différents ensemble de contraintes T4 fournit. Différents T4 « hôtes » (comme Visual Studio contre TextTransform.exe) se comportent de façons différentes et juste parce qu'un modèle T4 fonctionne bien dans un hôte ne signifie pas qu'il fonctionnera bien sous un autre hôte.

Autres conseils

setting.ttinclude doit être exécuté à l'intérieur du projet de Visual Studio, si vous voulez exécuter la ligne de commande, vous devrez donner le fichier de paramètres de la chaîne de connexion plutôt que pointant dans les fichiers de configuration, vous pouvez également pour définir un trajet de projet.

seee il appelle ceci:

string GetConnectionString(string connectionStringName){
    var _CurrentProject = GetCurrentProject();

    string result="";
    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
    configFile.ExeConfigFilename = GetConfigPath();

des thats probablement où le problème vient, donc si vous définissez ces à la main alors vous oproblem pourraient alors être résolus

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top