【问题标题】:.NET: Resgen Tutorial.NET:Resgen 教程
【发布时间】:2010-09-05 05:04:14
【问题描述】:

首先我有RFMRFM,我尝试关注一些网站,但我无法掌握资源管理器的概念。

谁能给我解释一下如何生成一个类似于 VS IDE 的资源管理器。

例如,如果我从命令行使用 VBC 编译,我可以看到我的所有资源文件。

vbc /t:exe myfile.vb /res:res1 /res:res2

Dim a as Assembly = Assembly.GetExecutingAssembly()
For Each i as string in a.GetManifestResourceNames()
    Console.writeline(i)
Next i

res1

res2

如果我使用 VS IDE 编译,我只会看到:

我的程序.Resources.resource

如何从命令行手动创建资源管理器,以便可以像在 VS IDE 中一样使用资源管理器?

Dim CurrentResourceManager As New ResourceManager(_
"myprogram.Resources", CurrentAssembly)
Dim CurrentResourceSet As ResourceSet = CurrentResourceManager.GetResourceSet( _
CultureInfo.CurrentCulture, True, True)

当我尝试使用 resgen 时,它会抱怨我的文件扩展名

C:...>resgen image.bmp myfile.Resource.resource source

ResGen:错误 RG0000:名为“image.bmp”的文件没有已知的扩展名。托管资源文件必须以 .ResX、.txt 或 .resources 结尾。

在手册中它声明使用RESXGEN 图像,但我不相信在 VS2008 中可用。我被卡住了。

更新:找到这个:http://msdn.microsoft.com/en-us/library/ekyft91f(VS.80).aspx 解释如何编写 ResX 文件。似乎是一个可重复的过程。我不确定他们为什么不包含 Visual Studio 的实用程序来创建它。

我尝试使用 ResourceWriter 的示例。 Resgen 在使用 MS 提供的 ResourceWriter 类时吐了。

【问题讨论】:

  • 包含一个实用程序。它被称为 Visual Studio。项目 + 属性,资源选项卡。

标签: .net vbc resgen


【解决方案1】:

Visual Studios Resx 生成文件的简化版本。我已删除公共令牌和架构映射。 Schema 映射旨在帮助您创建/修改这些文件。为了演示和简单,我把它去掉了。

<?xml version="1.0" encoding="utf-8"?>
<root>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral</value>
  </resheader>
  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral" />
  <data name="mylibrary" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>Resources\mylibrary.dll;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral</value>
  </data>
  <data name="mytext" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>Resources\mytext.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral</value>
  </data>
</root>

对于每个类型的字节或字符串包括以下数据。其中 name 是您要访问它的名称,value 是相对路径或硬路径:

<data name="mytext" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>Resources\mytext.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral</value>
<data>

将您的资源编译为单个资源管理器文件并包含在您的项目中

resgen /compile myrex.resx

vbc /t:exe myprogram.vb /res:myresx.resource
csc /t:exe myprogram.cs /res:myresx.resource

您必须在程序中创建资源管理器才能访问这些文件。如果您想要一个强类型资源管理器,您必须从项目内部遵循 Resource.Designer 类并修改该文件。如果您想要一个简单的资源管理器,只需使用 GetString 或 GetBytes。

Dim rm As New ResourceManager("rmc", [Assembly].GetExecutingAssembly())
day = rm.GetString("mytext")
o = rm.GetObject("mylibrary.dll")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多