Шаблон T4 создает дополнительные новые линии на некоторых ПК
При использовании классов T4 для фреймворка сущности существует несколько разработчиков, которые генерируют классы с одной дополнительной новой строкой для каждой сгенерированной строки. Мне интересно, если это какой-то параметр, который нужно изменить, чтобы их сгенерированные файлы T4 выглядели как сгенерированные файлы из других разработчиков. В качестве примера того, о чем я говорю: (удалены конкретные имена, но вы должны увидеть разницу в количестве новых строк, сгенерированных из одного и того же файла *.tt.)
(Обновление:) Проблема возникает и в других T4-шаблонах, а не только в EF. Оба компьютера используют TextTemplatingFileGenerator как настраиваемый инструмент T4.)
Выход T4 с моего ПК:
public virtual DbSet<GeneratedObject1> GeneratedObject1 { get; set; }
public virtual DbSet<GeneratedObject2> GeneratedObject2 { get; set; }
public virtual int SomeMethod1(Nullable<int> inParameter)
{
var localParameter = inParameter.HasValue ?
new ObjectParameter("SomePropertyName", inParameter) :
new ObjectParameter("SomePropertyName", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SomeMethod1", localParameter);
}
public virtual int SomeMethod2(Nullable<int> inParameter)
{
var localParameter = inParameter.HasValue ?
new ObjectParameter("SomePropertyName", inParameter) :
new ObjectParameter("SomePropertyName", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SomeMethod2", localParameter);
}
T4 выводится со своего ПК:
public virtual DbSet<GeneratedObject1> GeneratedObject1 { get; set; }
public virtual DbSet<GeneratedObject2> GeneratedObject2 { get; set; }
public virtual int SomeMethod1(Nullable<int> inParameter)
{
var localParameter = inParameter.HasValue ?
new ObjectParameter("SomePropertyName", inParameter) :
new ObjectParameter("SomePropertyName", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SomeMethod1", localParameter);
}
public virtual int SomeMethod2(Nullable<int> inParameter)
{
var localParameter = inParameter.HasValue ?
new ObjectParameter("SomePropertyName", inParameter) :
new ObjectParameter("SomePropertyName", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SomeMethod2", localParameter);
}
Edit:
(Примерно тот же текст в файле.)
Мой файл:
![Мой файл]()
Их файл:
![Их файл]()
Ответы
Ответ 1
Что @ralf.w. было решение этой проблемы. Окончания строк в файлах .tt
на проблемном компьютере были LF
, и это приводит к созданию дополнительных строк, когда инструмент преобразования работает. Правильные окончания строк должны быть CR
LF
. Как только мы изменили окончание строки в файлах .tt
, выходные файлы были сгенерированы должным образом. Я также изменил параметры завершения строки в Git, чтобы проверить как-есть, зафиксировать как есть. Этот вопрос содержит некоторую информацию о том, что означает параметры окончания строки и где они могут быть изменены.
Notepad ++ был использован для преобразования проблемных файлов .tt
в CR
LF
(у нас их было не так много.) Перейдите к Edit
→ EOL Conversion
→ Windows (CR LF)