Генераторы кода в Visual Studio

суббота, 30 мая 2009 г.,

В Visual Studio в Solution Explorer'е если стать на файл, например, с расширением dbml и нажать F4, то откроется панель свойств, в которой есть строка "Custom Tool: MSLinqToSQLGenerator" - это имя генератора, который на основе содержимого dbml файла создает соответствующий код.
Генерация кода происходит в момент сохранения dbml файла.

Информацию о генераторах можно найти в реестре в ветке: "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\". Генераторы для C# находятся в ветке "{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}", в которой указан MSLinqToSQLGenerator (где CLSID: {A25ACB97-FE65-4575-9B25-A89ADAECF4CE} - это идентификатор, по которому можно найти имя сборки и класс генератора).

Для этого переходим в ветку "HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0_Config\CLSID\{A25ACB97-FE65-4575-9B25-A89ADAECF4CE}", в которой указаны:
  • Assembly: Microsoft.VisualStudio.ORDesigner.Dsl, Version=10.0.0.0, Culture=Neutral, PublicKeyToken=B03F5F7F11D50A3A
  • Class: Microsoft.VisualStudio.ORDesigner.CodeGenerator.SingleFileGenerator
Т.е. генерацию C#-кода для dbml-файла выполняет класс SingleFileGenerator, определенный в файле D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Microsoft.VisualStudio.ORDesigner.Dsl.dll

Некоторые генераторы установленны в GAC (Global Assembly Cache; C:\Windows\assembly) как, например, TextTemplatingFileGenerator (TemplatedCodeGenerator, Microsoft.VisualStudio.TextTemplating.VSHost.dll).

P.S.
TemplatedCodeGenerator входит в состав Visual Studio 2008 SDK; см. С:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.TextTemplating.VSHost.dll

см. T4 (Text Template Transformation Toolkit) Code Generation - Best Kept Visual Studio Secret