.NET: Resgen Tutorial
Прежде всего, у меня есть 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 для ее создания.
Я попытался использовать пример ResourceWriter. Resgen вырвался при использовании MS ResidedWriter Class.
1 ответ
Упрощенная версия сгенерированного файла Visual Studios Resx. Я удалил Public Token и сопоставления схемы. Сопоставление схемы поможет вам при создании / изменении этих файлов. Для наглядности и простоты я убрал это.
<?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>
Для каждого типа байта или строки включите следующие данные. Где имя - это имя, к которому вы хотите получить доступ, а значение - это относительный или жесткий путь:
<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")