Я пытаюсь улучшить наш рабочий процесс с помощью некоторых XML-файлов конфигурации, которые мы используем в решении Visual Studio. Я подумал, что начну с объяснения того, что я пытаюсь достичь, а затем объясню некоторые из моих идей, которые я пытался в течение нескольких часов безуспешно.
Проблема
Я работаю с системой, в которой модель данных сконфигурирована в базе данных, модели также хранятся на диске с использованием xml-файлов, которые затем синхронизируются во время запуска приложения. Вот часть материала, который синхронизируется:
Типы данных
Все типы данных находятся в одном файле конфигурации XML для каждого типа данных, и у каждого есть некоторые свойства, такие как Имя и Ключ. Все типы данных настраиваются в одной папке, например: / config / dataTypes
Пример
textString.config
<?xml version="1.0" encoding="UTF-8" ?>
<DataType Key="a45c9a94-09d7-4df9-85e6-d6930abc6c12" Name="Textstring">
textArea.config
<?xml version="1.0" encoding="UTF-8" ?>
<DataType Key="b104788f-4e2f-4592-9387-8b3861bd8046" Name="Textarea">
Типы сущностей
Думайте об этом как о моделях с числом свойств X. Каждое свойство настроено и связано с типом данных.
* * Пример 1 022
customer.config
<?xml version="1.0" encoding="UTF-8" ?>
<Entity>
<Properties>
<Property Name="Firstname" TypeKey="a45c9a94-09d7-4df9-85e6-d6930abc6c12" />
<Property Name="Lastname" TypeKey="a45c9a94-09d7-4df9-85e6-d6930abc6c12" />
<Property Name="Description" TypeKey="b104788f-4e2f-4592-9387-8b3861bd8046" />
</Properties>
</Entity>
Моя конечная цель - предоставить intellisense при редактировании типа сущности, чтобы я получал все типы данных в качестве подсказок при вводе свойства "TypeKey" элемента Property. Желательно отображать имя типа данных в раскрывающемся списке и при его выборе добавить guid в качестве значения для свойства TypeKey. Я также хотел бы показать имя типов данных при наведении GUID с помощью мыши (или каким-либо другим способом).
Поскольку вы можете создавать образы во время процесса с проектом, можно добавлять новые типы данных, поэтому intellisense должен быть динамическим в зависимости от файлов в папке типов данных.
Я должен также упомянуть, что эти файлы конфигурации также можно редактировать из пользовательского интерфейса приложения, и я не могу контролировать, как они сериализуются, следовательно, в файлах нет пространства имен XML, они выглядят как в примеры выше.
У нас также есть несколько различных VS-решений с различными настройками типов данных и типов объектов. Поэтому нам нужен индивидуальный смысл в каждом проекте.
Что я пробовал
Моей первой идеей было создание VS-расширения, которое создает динамический XSD-файл XML-схемы на основе файлов в папке типов данных. Затем VS подхватывает и использует XSD для XML-файлов в Проекте, оказывается, что это работает только с настроенным пространством имен (помните, я не могу добавлять пространства имен, поскольку я не контролирую внешнее приложение).
Чтобы обойти это, работало, чтобы вручную добавить файл схемы в файл XML при редактировании файла. (Например: https://docs.microsoft.com/en-us/visualstudio/xml-tools/how-to-select-the-xml-schemas-to-use?view=vs-2019). Проблема в том, что это нужно сделать для каждого xml-файла, а настройка не сохраняется.
Затем я начал играть с возможностями расширения VS, чтобы попытаться автоматически настроить эту схему на открываемый XML-файл. Оказывается, мне действительно было трудно получить «объект конфигурации», который передается в обозреватель свойств при открытии файла XML. Мне удалось получить установку обработчика событий, которая была запущена, когда XML-файлы стали «фокусированными», но я застрял, пытаясь получить свойства из браузера свойств.
Я также попробовал другой подход с пользовательским расширением «автозавершение кода», но это сделало пользовательский интерфейс очень «захламленным» при редактировании.
Проведя около 10 часов, играя с этим, я чувствую, что действительно не могу найти хороший путь к решению, так как мой опыт работы с VS-расширениями не так уж и широк.
Я хотел бы получить отзывы и идеи о том, как решить эту проблему, поскольку XSD отличается от каждого проекта, если я иду по «динамическому» пути, мы не можем использовать глобальные настройки VS, поскольку у каждого проекта разные следовательно, для типов данных необходимы разные допустимые значения для свойства TypeKey.
Один из подходов, о котором я думаю, - это использовать универсальный XSD (разрешающий все значения для TypeKey) в глобальном кэше схемы для Visual Studio и создать функцию «автозавершения кода» только для TypeKeys.
Будем очень благодарны за любые мысли и указания в правильном направлении.