.NET: Resgen Tutorial - PullRequest
       39

.NET: Resgen Tutorial

1 голос
/ 05 сентября 2010

Во-первых, у меня есть RFM и RFM , и я пытался перейти на несколько сайтов, но не могу понять концепцию диспетчера ресурсов.

Может кто-тоПожалуйста, объясните мне, как создать менеджер ресурсов, похожий на IDE VS.

Например, если я компилирую с 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

IfЯ компилирую с 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 ResourceWriter Class.

1 Ответ

0 голосов
/ 09 сентября 2010

Упрощенная версия сгенерированного файла 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>

Для каждого типа байта или строки включите следующие данные.Где name - это имя, к которому вы хотите получить доступ, а значение 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

Вы должны создать менеджер ресурсов в вашей программе для доступа к этим файлам.Если вам нужен строго типизированный менеджер ресурсов, вы должны следовать классу Resource.Designer из вашего проекта и изменить этот файл.Если вам нужен простой менеджер ресурсов, просто используйте GetString или GetBytes.

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