Web应用程序中System.Windows.Forms的资源和引用

时间:2015-08-27 12:55:09

标签: c# asp.net resources resharper resx

我在ASP.NET MVC应用程序中使用了一个资源文件,当我分析项目的代码问题时,ReSharper警告我没有找到System.Windows.Forms参考。

我真的应该在我的网络应用程序中引用System.Windows.Forms吗?无论如何,为什么在resx文件中需要它?

当我在XML编辑器中打开resx文件时,我看到它引用了程序集:

<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相关的任何内容相关联。

为什么?有没有更好的方法来管理Web应用程序上的资源,然后使用这些resx文件?

1 个答案:

答案 0 :(得分:6)

资源文件格式记录在此处:Creating Resource Files

.resources 格式是一种二进制格式,允许将资源嵌入运行时.dll或.exe中。可以使用 mscorlib 程序集中存在的类来读取和写入它:ResourceReader和ResourceWriter

.ResX 文件格式是一种基于XML的格式,可以使用 System.Windows.Forms 程序集中存在的类来读取和写入:ResXResourceReader和ResXResourceWriter 。 (实际上,在创建新的ResX文件时,在文件中放置的注释中解释了XML模式。)

只有.resources应嵌入运行时可执行文件中。这就是为什么.ResX格式可以被认为是.resources格式的“源文件格式”。

现在,在这些格式中,您可以嵌入几乎任何类型的资源,但您必须告诉系统如何,因为存储在这些文件中的数据实际上是数据的序列化版本。 对于存储字符串,您不需要对外部反序列化器类有任何额外的依赖关系,但对于其他类型(如Icon,Bitmap等),您可以。 Visual Studio编辑器使用您在文件中看到的System.Windows.Forms(de)序列化程序类。因此,您需要隐式加载System.Windows.Forms以反序列化这些非字符串数据。

因此,如果您使用Visual Studio创建了非字符串资源,那么您将在System.Windows.Forms上有一个隐式引用,是的。 如果您不想这样,请删除对这些非字符串资源的所有引用(您也可以非常轻松地手动调整文件)并使用其他方式存储您的资产(例如,“构建操作”中的“嵌入式资源”或“普通”资产) “您网站上的目录。”

请注意,您理论上也可以使用自己的类来存储自定义数据,如下所示:Resources in .resx File Format

  

以下示例显示保存在.resx文件中的Int32对象,以及   一个位图对象的开头,它保存二进制信息   来自实际的.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文件版本的自定义类。