Ресурс и ссылки на 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.