Два пользовательских инструмента для одного файла?

Я хочу сгенерировать некоторый код из моего файла dbml(Linq to Sql), файл dbml размещен во многих частях моего проекта, поэтому я написал специальный инструмент для этой цели

Но проблема в том, что dbml уже содержит пользовательский инструмент MSLinqToSQLGenerator,

Итак, знаете ли вы какой-либо способ установить два пользовательских инструмента для одного файла? Если нет, дайте мне знать вашу идею об этом

2 ответа

Visual Studio будет поддерживать только один "Пользовательский инструмент" для каждого файла, но вы можете добавить шаг предварительной компиляции, чтобы запускать другие инструменты для чего угодно. Например, у меня есть следующий шаг предварительной компиляции на вкладке "Build Events" одного из моих проектов.

"$(DevEnvDir)..\..\..\Common Files\Microsoft Shared\TextTemplating\10.0\TextTransform" "$(ProjectDir)DataContext\Northwind.proxy.tt"

Здесь много относительного пути, чтобы найти инструмент командной строки T4, но вы поняли идею. Этот конкретный файл T4 рассчитан на то, чтобы находиться в том же каталоге, что и файл.dbml, который он читает для генерации своего вывода.

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

Вы получите надлежащий контроль над T4, если включите генератор LINQ to SQL T4 в ответственность вашего шаблона.

Если я правильно понял, вы хотите сохранить стандартное поведение генератора.dbml, но также добавить свой собственный.

Это казалось немного "старым", и я некоторое время лично не использовал LINQ to SQL, но я использовал замену генератора T4 "как есть", который дал эквивалент стандартного генератора.dbml.

https://github.com/damieng/L2ST4

Не уверен, что это соответствует версии VS 2010, но вы всегда можете сравнить стандартный сгенерированный код.dbml и этот вывод T4 и внести соответствующие изменения для достижения идентичного результата.

Конечно, вы можете просто иметь несколько разных генераторов и просто запускать их с помощью "Transform All Templates", но, основываясь на вашем вопросе, вы бы хотели, чтобы генератор был присоединен к специальному инструменту для конкретного файла.

Возможно, вы захотите проверить (если это уже не знакомо вам) также T4 Toolbox https://github.com/olegsych/T4Toolbox который добавляет в файл пользовательский инструмент "T4ScriptFileGenerator". Это эффективно выполняет код T4, когда файл изменяется.

Другие вопросы по тегам