题
首先我有 RFM 和 RFM 而且我试图关注几个网站,但我无法掌握资源经理的概念。
有人可以向我解释如何生成类似于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编译,我只会看到:
myProgram.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中包含实用程序来创建它。
我试图使用资源作者的示例。 Resgen使用MS提供的资源作者类时。
解决方案
Visual Studios Resx生成的文件的简化版本。我删除了公共令牌和模式映射。架构映射将在创建/修改这些文件时为您提供帮助。为了演示和简单性,我已经将其删除了。
<?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>
对于每个类型的字节或字符串,包括以下数据。名称是您要访问它的名称,值为eitehr是一个相对或硬路径:
<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
您必须在程序中创建资源管理器才能访问这些文件。如果您想要一个强大的资源管理器,则必须关注来自项目内部的DESIGNER类并修改该文件。如果您想要一个简单的资源管理器,只需使用getstring或getBytes即可。
Dim rm As New ResourceManager("rmc", [Assembly].GetExecutingAssembly())
day = rm.GetString("mytext")
o = rm.GetObject("mylibrary.dll")