2009-04-07 3 views
2

В .NET возможно генерировать диаграммы классов (.cd) программно (C#)? Если да, то как?.NET Class Diagrams без использования конструктора

PD: Очевидно, я не прошу указания о том, как сгенерировать это с помощью среды IDE. Я знаю, что я могу перетаскивать классы в элемент ClassDiagram.

ответ

3

Я только что открыл .cd-файл, используя блокнот, это plain XML ... Мне не так сложно сгенерировать его программно.

0

Выберите файлы .cs, для которых требуется диаграмма классов, и выберите «Показать класс», и будет создан и отображен файл .cd.

+0

Это не код. –

+0

Да, это ... код - это вход, поэтому, из кода ... ;-P – Shog9

+0

Я думаю, что понимаю, что вы имеете в виду сейчас, но этот ответ я не знаю. –

0

Да, вы просто открываете Visual Studio и щелкаете правой кнопкой мыши по вашему .cs-файлу или вашему проекту и выбираете View Class Diagram. Создается .cd.

0

Приносим извинения за ответ наполовину, но чтобы убедиться, что это действительно возможно, потребуется довольно много времени.

Если вы посмотрите на формат XML, это довольно загадочно, особенно запись Хэш, которая, если вы удалите, тогда IDE удалит запись (я так много пробовал).

Чтобы фактически автоматизировать его, вам нужно будет использовать API автоматизации VS, EnvDTE. API-интерфейсы довольно загадочны, а также обобщены. Я не смог найти конкретный класс или что-нибудь, что касалось диаграмм классов, чтобы просмотреть документацию.

Если вам достаточно провести пару часов, вы должны начать с создания вручную, чтобы вы могли проверить его с помощью API автоматизации. С помощью объекта COM EnvDTE (либо CoCreated, либо поставленного в макросе VS) используйте DTE.Solution.Open, чтобы открыть свое решение. Затем используйте DTE.Solution.Projects, чтобы найти ваш проект с диаграммой классов и Project.ProjectItems, чтобы найти файлы Diagram.

Оттуда я сначала посмотрел бы, будет ли свойство Kind на ProjectItem указывать что-то особенное, а затем возиться с другими свойствами и отражать свойство Object объекта ProjectItem, чтобы узнать, получаете ли вы что-то особенное.

Если вам просто нужно сгенерировать его один раз, посмотрите на свойство DTE.Commands, чтобы получить список доступных команд. Команда, вызываемая щелчком правой кнопкой мыши по меню, должна быть где-то там. Затем вы можете использовать DTE.Windows.Items (Constants.vsWindowKindSolutionExplorer) .Object как UIHeirarchy, чтобы получить окно проводника решений и поиграть с UIHeirarchy и UIHeirarchyItem, чтобы выбрать файлы, а затем вызвать команду.

Извините, я не могу представить полный пример, но поскольку у меня нет кодов для дерева, вам потребуется несколько часов.

Смежные вопросы