2015-08-27 1 views
3

J'utilise un fichier de ressources dans mon application ASP.NET MVC et ReSharper m'avertit de ne pas trouver la référence System.Windows.Forms lorsque j'analyse les problèmes de code du projet.Ressource et références à System.Windows.Forms dans les applications Web

Dois-je vraiment faire référence à System.Windows.Forms dans mon application Web? Pourquoi est-il nécessaire dans le fichier resx de toute façon?

Quand j'ouvre le fichier resx dans l'éditeur XML, je vois qu'il fait référence à l'assemblée:

<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> 

Je n'aime vraiment pas que mon application Web est lié à quoi que ce soit lié System.Windows.Forms.

Pourquoi est-ce? Existe-t-il une meilleure façon de gérer les ressources sur les applications Web, puis d'utiliser ces fichiers resx?

Répondre

4

Ressources formats de fichiers sont documentés ici: Creating Resource Files

Le format .resources est un format binaire qui permet aux ressources d'être intégrés dans l'exécution .dll ou .exe. Il peut être lu et écrit en utilisant des classes qui existent dans le mscorlib assemblage: ResourceReader et ResourceWriter

Le format de fichier .resX est un format basé sur XML qui peut être lu et écrit en utilisant des classes qui existent dans le System.Windows.Forms assembly: ResXResourceReader et ResXResourceWriter. (le schéma XML est en fait expliqué dans le commentaire placé dans le fichier lorsque vous créez un nouveau fichier ResX). Seules les .resources doivent être intégrées dans un exécutable d'exécution.

C'est pourquoi le format .ResX peut être considéré comme un "format de fichier source" pour le format .resources. Maintenant, dans ces formats, vous pouvez intégrer des ressources de pratiquement n'importe quel type, mais vous devez indiquer au système comment, puisque les données stockées dans ces fichiers sont en fait une version sérialisée des données. Pour stocker des chaînes, vous n'avez pas besoin de dépendances supplémentaires sur la classe de désérialiseur externe, mais pour d'autres types (comme Icon, Bitmap, etc.), vous le faites. L'éditeur Visual Studio utilise les classes System.Windows.Forms (de) sérialiseurs que vous voyez dans vos fichiers. Vous devez donc implicitement charger System.Windows.Forms pour que la désérialisation de ces données non-string fonctionne. Par conséquent, si vous avez créé des ressources non-chaînes à l'aide de Visual Studio, vous aurez une référence implicite sur System.Windows.Forms, oui. Si vous ne le souhaitez pas, supprimez toutes les références à ces ressources non-chaînes (vous pouvez également modifier le fichier manuellement assez facilement) et stockez vos ressources en utilisant d'autres moyens ('Embedded Resource' sur Build Action par exemple "assets" dans votre site web).

Notez que vous pouvez également utiliser théoriquement vos propres classes pour stocker vos données personnalisées comme indiqué ici: Resources in .resx File Format

L'exemple suivant montre un objet Int32 enregistré dans un fichier .resx et le début d'un bitmap objet, qui contient les informations binaires à partir d'un fichier .gif réel.

<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> 

A ma connaissance, l'éditeur Visual Studio ne prend pas en charge les classes personnalisées comme celle pour l'édition de fichiers .resx.