2014-12-04 2 views
5

Я хочу поместить некоторые метаданные во все файлы resx в решении. Является ли кажется, что это может быть достигнуто с помощью metadata элемент включен во встроенном XSD для Resx файлов:Как добавить метаданные в файлы resx

<xsd:element name="metadata"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="value" type="xsd:string" minOccurs="0" /> 
     </xsd:sequence> 
     <xsd:attribute name="name" use="required" type="xsd:string" /> 
     <xsd:attribute name="type" type="xsd:string" /> 
     <xsd:attribute name="mimetype" type="xsd:string" /> 
     <xsd:attribute ref="xml:space" /> 
     </xsd:complexType> 
</xsd:element> 

Я не 100% уверен, что metadata элемент должен быть использован для хранения произвольных метаданных, потому что я не смог найти любую документацию по ее назначению. Но он отлично работает, поскольку файлы resx редактируются с помощью текстового редактора.

Проблема возникает при редактировании файла resx в Visual Studio 2013. По умолчанию для открытия ресурса используется «Редактор управляемых ресурсов». К сожалению, редактор управляемых ресурсов не проводит различия между данными и метаданными. Это приводит к тому, что метаданные будут тихо изменены на данные о сохранении. Эта ошибка (или, возможно, намеренный дизайн) существует с at least 2010.

Мы также попытались добавить элементы Редактор управляемых ресурсов не узнал бы, но эти элементы были удалены при сохранении. То же самое произошло с комментариями XML. Такое поведение более понятно, но не оставляет нам много хороших вариантов.

Вот возможные решения я в курсе:

  1. мандата, что никто не может использовать редактор управляемых ресурсов. Это может быть хорошо, если бы это был только я, но я не могу требовать этого от всей команды. Редактор управляемых ресурсов слишком полезен.
  2. Требовать, чтобы все вручную исправляли метаданные после использования редактора управляемых ресурсов. Это слишком склонно к ошибкам и обременительно.
  3. Отправить вопрос команде Visual Studio. Мы будем делать это, но нам нужно решение, пока мы ждем, и нет никаких гарантий, что когда-нибудь придет исправить.
  4. Редактор управляемых ресурсов Fork, поэтому он ведет себя так, как мы хотим. Я не смог найти источник, и это, вероятно, имеет проблемы с лицензированием. Мы также не заинтересованы в поддержке вилки.
  5. Напишите собственную версию редактора управляемых ресурсов. Это похоже на описанный выше вариант, но это больше, чем для нашего прецедента.
  6. Просто сохраните метаданные в теге data. Это очевидный взлом.

Похоже, что неудача здесь заключается не в самих файлах resx, а в инструментах Visual Studio вокруг файлов resx. Тем не менее, мы не уходим из Visual Studio в ближайшее время. Есть ли какие-то решения, которые мне не хватает?

ответ

0

Мне не удалось найти подходящее решение для добавления метаданных в файлы. Я закончил работу с предложенным решением # 6: Храните метаданные в теге data.

Более конкретно, мы по существу создали зарезервированное имя ключа, указав, что никаким файлам ресурсов не разрешено использовать ключ ResxFileMetadata. Затем в файлах resx, в которых требуются метаданные, мы добавили ресурс с именем ResxFileMetadata и без значения. Фактические метаданные были сохранены как JSON внутри комментария.

Мы также обязали, чтобы код не позволял специально читать ресурсы ResxFileMetadata. Функции, которые создали словари из файлов resx, явно пропускали ResxFileMetadata. Эти мандаты в основном являются просто внутренней документацией, они не применяются кодеком.

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