.NET: Учебное пособие по ресгену

Во-первых, у меня есть 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

разрешение1

разрешение2

Если я компилирую с помощью VS IDE, я вижу только:

моя программа.ресурсы.ресурс

Как создать диспетчер ресурсов вручную из командной строки, чтобы использовать его так же, как в VS IDE?

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

Когда я пытаюсь использовать ресген, он жалуется на расширение моего файла.

C:...>resgen image.bmp myfile.Resource.resource источник

ResGen: ошибка RG0000: файл с именем «image.bmp» не имеет известного расширения. Файлы управляемых ресурсов должны заканчиваться на .ResX, .txt или .resources.

В Руководстве указано использовать RESXGEN для изображений, но я не верю, что это доступно в VS2008. Я застрял.

Обновление: найдено следующее: http://msdn.microsoft.com/en-us/library/ekyft91f(VS.80).aspx Объясняет, как написать файл ResX. Похоже на повторяющийся процесс. Я не уверен, почему они не включили бы утилиту с визуальной студией для ее создания.

Я попытался использовать пример ResourceWriter. Ресгена стошнило при использовании предоставленного MS класса ResourceWriter.


person Community    schedule 05.09.2010    source источник
comment
В комплекте есть утилита. Называется Visual Studio. Проект + Свойства, вкладка Ресурсы.   -  person Hans Passant    schedule 05.09.2010


Ответы (1)


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

Для каждого типа байта или строки включаются следующие данные. Где имя — это имя, по которому вы хотите получить к нему доступ, а значение — либо относительный, либо жесткий путь:

<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")
person Community    schedule 09.09.2010