web应用程序中System.Windows.Forms的资源和参考

本文关键字:资源 参考 Forms Windows 应用程序 System web | 更新日期: 2023-09-27 18:10:01

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

我真的应该在我的web应用程序引用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>

我真的不喜欢我的web应用程序链接到任何与System.Windows.Forms相关的东西。

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

web应用程序中System.Windows.Forms的资源和参考

资源文件格式说明如下:创建资源文件

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

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

只有。resources应该嵌入到运行时可执行文件中。这就是为什么。resx格式可以被认为是。resources格式的"源文件格式"。

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

因此,如果您使用Visual Studio创建了非字符串资源,那么您将在System.Windows上获得隐式引用。形式,是的。如果你不想这样,删除所有对这些非字符串资源的引用(你也可以很容易地手动调整文件),并使用其他方式存储你的资源(例如,Build Action上的"Embedded Resource",或者在你的网站上直接使用"assets"目录)。

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

下面的示例显示了保存在.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文件。