Pergunta

Estou usando o subsônico 3 (Modo ActiveRecord) para gerar o código para o meu DAL. Ele usa arquivos de modelos T4 (.tt) que, assim que você economizar, gerar o código para você.

Quero automatizar isso como parte da minha construção NANT, mas não consigo fazer isso funcionar. Eu sei que a MS fornece uma ferramenta chamada TextTransform para gerar o código a partir de modelos T4, mas no caso dos modelos subsônicos isso não parece funcionar - acho que os modelos fazem algumas suposições sobre o modelo que está sendo executado no Visual Studio, o que parece não funcionar na linha de comando. O erro que recebo quando tento executá -lo contra ActiveRecord.tt é:

Subsônico ActiveRecord.tt (0,0): Erro: Execução da transformação: System.InValidCastException: Incapaz de fundir o objeto do tipo 'Microsoft.VisualStudio.TextTemplating.Commandline.CommandLineHost' to Type 'System.ISSERVICEPROVER'. em microsoft.visualstudio.textTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.getCurrentProject () em C: Users Matt.Roberts AppData loc al temp subsônico Settings.ttinclude: Linha 103 em Microsoft.VisualStudio.TextTemplating3D54BBCED242483B. GeneratedTextTransformation.GetConnectionString(String connectionStringName) in c:U sersmatt.robertsAppDataLocalTempsubsonicSettings.ttinclude:line 51 at Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b. GeneratedTextTransformation.get_connectionstring () em C: Users Matt.roberts AppData Local Temp Subsonic Settings.ttinclude: Linha 87

Alguém conseguiu automatizar esta geração?

Obrigado

Matt.

Foi útil?

Solução

Eu escrevi uma entrada de blog que cobre esse terreno um pouco:

Opções para executar modelos T4 a partir do código .NET

Fazer o que você está tentando fazer exigirá alguma cirurgia nos modelos subsônicos de T4. Especificamente, você precisará substituir (minimamente) todas as referências ao Envdte.dte por algo que não exige que o Visual Studio esteja em execução. Isso pode ser tão simples quanto codificar alguns caminhos e/ou informações de configuração em seus modelos T4, se você quiser apenas "fazê -lo funcionar".

É importante lembrar que os modelos T4 são um invólucro um pouco fino em torno do código .NET. Se você pode fazer isso no .NET, provavelmente pode fazê -lo no T4, basta entender como trabalhar dentro do conjunto diferente de restrições que o T4 fornece. Diferentes "hosts" T4 (como o Visual Studio vs. texttransform.exe) se comportam de maneiras diferentes e apenas porque um modelo T4 funciona bem sob um host não significa que ele funcionará bem sob outro host.

Outras dicas

Setting.ttinclude precisa ser executado dentro do projeto do Visual Studio, se você quiser executar da linha de comando, precisará fornecer o arquivo de configurações da sequência de conexão em vez de apontar para ela nos arquivos de configuração, você também pode precisar definir um caminho do projeto.

Você vê isso chamando isso:

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

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

é provavelmente onde o problema decorre, então se você defini -los manualmente, você poderá ser resolvido

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top