2012-06-08 2 views
0

Я использую временный текстовый шаблон T4. Я хочу, чтобы файл C#, созданный препроцессором, имел расширение вывода .tt.cs, однако по умолчанию он имеет только расширение .cs. Если это был шаблон текста времени разработки, я мог бы добавить директиву расширения вывода, чтобы обеспечить соблюдение этого поведения. Однако, похоже, что такие директивы не влияют на шаблоны времени выполнения. Кто-нибудь знает, как это сделать с шаблонами времени выполнения?Могу ли я изменить автоматически сгенерированный суффикс по умолчанию, выведенный cs-файл Visual Studio 2010 во время выполнения T4?

<#@ output extension=".tt.cs" #> 

ответ

2

Нет тривиального способа, но это можно сделать.

Сначала создайте свой собственный генератор файлов, полученный из TemplatePreprocessor в Microsoft.VisualStudio.TextTemplationg.VSHost.10.0.dll и зарегистрируйте его в Visual Studio.

Затем переопределите ProcessTemplate() и после вызова базовой реализации вызовите SetFileExtension с любым желаемым расширением.

Это очень много работы, хотя для такого небольшого изменения.

+0

Там мы идем. Похоже, @GarethJ знает, о чем он говорит лучше меня. –

+0

Благодарим вас за ввод. Я согласен с тем, что для такого небольшого изменения звучит много работы. Я собираюсь заверить ваше слово, что ваш метод работает. Я также собираюсь отметить ваш ответ в качестве решения и перейду от этого внимания. Еще раз спасибо. – csj

1

Я нашел следующее на этом link. Может показаться вам полезным, поскольку он показывает, как установить .cs, используя Preprocessed Template, но только если вы вызываете шаблон из другого шаблона. Не нашли ничего, показывая, что это возможно, если вы используете код C# или VB.

Директива < # @ output #>, по-видимому, не влияет на предварительно обработанные шаблоны. Никакая ошибка не возникает, когда предварительно обработанный шаблон содержит эту директиву. Приложение-хостинг отвечает за изменение расширения выходного файла.

+0

Благодарим вас за ответ. Похоже, вы поняли мой вопрос, но, к сожалению, ваше решение, похоже, не работает для шаблонов текста во время выполнения - только шаблоны времени разработки. Я буду перефразировать вопрос, надеюсь, улучшить ясность. – csj