Ресурс и ссылки на System.Windows.Forms в веб-приложениях

Я использую файл ресурсов в своем приложении ASP.NET MVC, и ReSharper предупреждает меня о том, что я не могу найти ссылку на System.Windows.Forms, когда анализирую проблемы с кодом проекта.

Должен ли я действительно ссылаться System.Windows.Forms в моем веб-приложении? В любом случае, зачем это нужно в файле resx?

Когда я открываю файл resx в редакторе XML, я вижу, что он ссылается на сборку:

<resheader name="reader">
  <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
  <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="..." type="System.Resources.ResXFileRef, System.Windows.Forms">
  <value>...;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>

Мне действительно не нравится, что мое веб-приложение связано с чем-либо System.Windows.Forms связанные с.

Это почему? Есть ли лучший способ управления ресурсами в веб-приложениях, чем использовать эти файлы resx?

1 ответ

Решение

Форматы файлов ресурсов описаны здесь: Создание файлов ресурсов

Формат .resources - это двоичный формат, который позволяет встраивать ресурсы в среду выполнения.dll или.exe. Его можно читать и записывать с использованием классов, существующих в сборке mscorlib: ResourceReader и ResourceWriter

Формат файла .ResX - это формат на основе XML, который можно читать и записывать с использованием классов, существующих в сборке System.Windows.Forms: ResXResourceReader и ResXResourceWriter. (Схема XML на самом деле объясняется в комментарии, помещенном в файл при создании нового файла ResX).

Только исполняемые файлы должны быть встроены в исполняемый файл. Вот почему формат.ResX можно рассматривать как "формат исходного файла" для формата.resources.

Теперь в этих форматах вы можете встраивать ресурсы практически любого типа, но вы должны сообщить системе, как, поскольку данные, хранящиеся в этих файлах, на самом деле являются сериализованной версией данных. Для хранения строк вам не нужны никакие дополнительные зависимости от внешнего класса десериализатора, но для других типов (таких как Icon, Bitmap и т. Д.) Вам это нужно. Редактор Visual Studio использует классы сериализаторов System.Windows.Forms (de), которые вы видите в своих файлах. Таким образом, вам необходимо неявно загрузить System.Windows.Forms для десериализации этих нестроковых данных для работы.

Итак, если вы создали не строковые ресурсы с помощью Visual Studio, у вас будет неявная ссылка на System.Windows.Forms, да. Если вы не хотите этого, удалите все ссылки на эти нестроковые ресурсы (вы также можете довольно легко настроить файл вручную) и сохраните свои активы, используя другие средства (например, "Встроенный ресурс" в Build Action, или простые "активы"). "каталог на вашем веб-сайте).

Обратите внимание, что вы также можете теоретически использовать свои собственные классы для хранения ваших пользовательских данных, как показано здесь: Ресурсы в формате файла.resx

В следующем примере показан объект Int32, сохраненный в файле.resx, и начало объекта растрового изображения, который содержит двоичную информацию из фактического файла.gif.

<data name="i1" type="System.Int32, mscorlib">
  <value>20</value>
</data>

<data name="flag" type="System.Drawing.Bitmap, System.Drawing,   
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
mimetype="application/x-microsoft.net.object.bytearray.base64">
  <value>
    AAEAAAD/////AQAAAAAAAAAMAgAAADtTeX…
  </value>
</data>

Насколько мне известно, редактор Visual Studio не поддерживает пользовательские классы, подобные этой, для редактирования файлов.ResX.

Другие вопросы по тегам