Как я могу автоматизировать генерацию кода t4 для SubSonic

StackOverflow https://stackoverflow.com/questions/2325403

Вопрос

Я использую SubSonic 3 (режим ActiveRecord) для генерации кода для моего DAL.Он использует файлы шаблонов T4 (.tt), которые, как только вы сохраняете, генерируют код для вас.

Я хочу автоматизировать это как часть моей сборки NANT, но я не могу заставить это работать.Я знаю, что MS предоставляет инструмент под названием TextTransform для генерации кода из шаблонов T4, но в случае шаблонов SubSonic это, похоже, не работает - я думаю, шаблоны делают некоторые предположения о том, что шаблон запускается из Visual Studio, что, похоже, не работает из командной строки.Ошибка, которую я получаю, когда пытаюсь запустить ее против ActiveRecord.tt это:

Subsonic\ActiveRecord.tt (0,0) :ошибка :Запущенная трансформация:Система.Исключение InvalidCastException:Не удается преобразовать объект типа 'Microsoft.VisualStudio.TextTemplating.Командная строка.CommandLineHost' в тип 'System.IServiceProvider'.в Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b.Сгенерированный тексттрансформации.Получить CurrentProject() в c:\Users\matt.roberts\AppData\Loc al emp\subsonic\Settings.ttвключить:строка 103 в Microsoft.VisualStudio.Текстовый шаблон 3d54bbced2424853b667e74a81b9089b.Генерируемая текстовая трансформация.GetConnectionString(строка connectionStringName) в c:\U sers\matt.roberts\AppData\Local emp\subsonic\Settings.ttвключить:строка 51 в Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b.Сгенерированный тексттрансформации.get_ConnectionString() в c:\Users\matt.roberts\AppData\ Local emp\subsonic\Settings.ttвключите:строка 87

Кому-нибудь удалось автоматизировать это поколение?

Спасибо

Мэтт.

Это было полезно?

Решение

Я написал запись в блоге, которая в некоторой степени освещает эту тему:

Параметры для запуска шаблонов T4 из .СЕТЕВОЙ код

Чтобы сделать то, что вы пытаетесь сделать, потребуется некоторая операция на дозвуковых шаблонах T4.В частности, вам придется (минимально) заменить все ссылки на EnvDTE.DTE на что-то, что не требует запуска Visual Studio.Это может быть так же просто, как жесткое кодирование некоторых путей и / или информации о конфигурации в ваших шаблонах T4, если вы хотите просто "заставить это работать".

Важно помнить, что шаблоны T4 представляют собой довольно тонкую оболочку .СЕТЕВОЙ код.Если вы можете сделать это из .NET, вы, скорее всего, сможете сделать это из T4, вам просто нужно понять, как работать в рамках другого набора ограничений, которые предоставляет T4.Разные "хосты" T4 (например, Visual Studio противTextTransform.exe ) ведут себя по-разному, и только потому, что шаблон T4 отлично работает на одном хосте, не означает, что он будет нормально работать на другом хосте.

Другие советы

setting.ttinclude необходимо запускать внутри проекта visual studio, если вы хотите запустить из командной строки, вам придется указать файлу настроек строку подключения, а не указывать на нее в файлах конфигурации, возможно, вам также придется указать путь к проекту.

вы видите, как это называется:

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

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

вероятно, именно в этом и кроется проблема, поэтому, если вы установите их вручную, то ваша проблема может быть решена

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top