Visual Studio 15 SP 1
Добавил пару толоозок для работы с шаблонами - 'T4Toolbox' & 'tangible T4'.
По ощущениям - стало существенно медленнее. Особенно чувствуется на загрузке.
У меня SSD и в обычном варианте все летает. Сейчас, при загрузке, весьма тяжко.
Есть и положительные изменения - появилась подсветка синтаксиса в шаблонах
и возможность работать с параметрами в Свойствах. От последнего толку пока
мало - шаблоны получают параметры из сессии, которая лежит в АппХосте и
которую Я на сейчас не использую. генерируемый для параметров код так же
привязан к использованию АппХоста... но тут его можно подменить.
Слепил псевдосессию и передал через нее параметры. Код стал выглядеть/...
хммм... интересно:
TParams param = Load(fi); // загрузка файла с определениями
// установка параметров
TExecutionContext.Instance[Primitive.TNamespaceDefinition.ID] = param.NamespaceDef;
TExecutionContext.Instance[Primitive.TClassDefinition.ID] = param.ClassDef;
//TExecutionContext.Instance[Primitive.TFieldsList.ID] = param.Fields;
TExecutionContext.Instance["Fields"] = param.Fields; // передача - по имени переменной
// инициализация параметров в ДЛЛке
Code.Templates.Base.TBase.ExecutionContext = TExecutionContext.Instance;
Code.Templates.Base.TBase.FileManager = new Code.FileManager.TFileManager();
// генерация - осталось 2 строки на шаблон
TFieldNames fn = new TFieldNames();
//fn.Namespace = param.NamespaceDef;
//fn.Class = param.ClassDef;
//fn.Fields = param.Fields;
fn.Generate();
//generated = fn.TransformText();
//filename = GenerationPath + param.ClassDef.Name + ".FieldNames.cs";
//File.Delete(filename);
//File.AppendAllText(filename, generated);
TRow row = new TRow();
//row.Namespace = param.NamespaceDef;
//row.Class = param.ClassDef;
//row.Fields = param.Fields;
row.Generate();
//generated = row.TransformText();
//filename = GenerationPath + param.ClassDef.Name + ".Row.cs";
//File.Delete(filename);
//File.AppendAllText(filename, generated);
TSubset ss = new TSubset();
//ss.Namespace = param.NamespaceDef;
//ss.Class = param.ClassDef;
//ss.Fields = param.Fields;
ss.Generate();
//generated = ss.TransformText();
//filename = GenerationPath + param.ClassDef.Name + ".Subset.cs";
//File.Delete(filename);
//File.AppendAllText(filename, generated);
TTable tb = new TTable();
//tb.Namespace = param.NamespaceDef;
//tb.Class = param.ClassDef;
//tb.Fields = param.Fields;
tb.Generate();
//generated = tb.TransformText();
//filename = GenerationPath + param.ClassDef.Name + ".Table.cs";
//File.Delete(filename);
//File.AppendAllText(filename, generated);
Но надо дорабатывать - активно использую подшаблоны - туда еще не передаются параметры.
Проблем две - надо научится из конструктора получать ссылку на переменную (ссылку на файл
куда добавлйать текст) с классе которой создается подшаблон и подумать как, через сессию,
передавать параметры при паралельном выполнении кода... НУ да это не сегодня...
P.S. Кто бы мне сказал где поменять код генерируемый для шаблона и параметров... Где
компилятор шаблонов - Я заню, вопрос в том как поменять его выдачу...