Два пользовательских инструмента для одного файла?
Я хочу сгенерировать некоторый код из моего файла 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, когда файл изменяется.