Frage

Als erstes habe ich RFM und RFM und ich habe zu folgen versucht, ein paar Seiten, aber ich kann das Konzept des Resource Managers nicht fassen.

Kann jemand mir bitte erklären, wie man einen Ressourcenmanager, dass der VS IDE ähnlich zu erzeugen.

Zum Beispiel, wenn ich mit VBC von der Kommandozeile kompilieren ich alle Dateien meine Ressource sehen können.

  

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

Wenn ich mit der VS IDE ich kompilieren nur sehen:

  

myprogram.Resources.resource

Wie erstelle ich einen Ressourcen-Manager manuell über die Befehlszeile so, dass ich den Ressourcenmanager verwenden kann, wie ich sich mit dem VS IDE?

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

Wenn ich versuche zu verwenden resgen klagt es über meine Dateierweiterung

  

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

     

ResGen: Fehler RG0000: Die Datei mit dem Namen „image.bmp“ hat keine bekannte Nebenstelle. Managed-Ressource-Dateien muss ein Ende in RESX, TXT oder RESOURCES.

Im Handbuch heißt es RESXGEN für Bilder, aber ich glaube nicht, dass in VS2008 verfügbar ist. Ich bin fest.

Update: Fand dieses: http: // msdn .microsoft.com / en-us / library / ekyft91f (VS.80) aspx Erklärt, wie eine ResX Datei zu schreiben. Scheint wie ein wiederholbarer Prozess. Ich bin nicht sicher, warum sie nicht ein Dienstprogramm mit Visual Studio enthält, es zu schaffen.

Ich habe versucht, am Beispiel des Resource zu verwenden. Resgen gekotzt die MS bei der Verwendung bereitgestellt Resource Klasse.

War es hilfreich?

Lösung

Vereinfachte Version von Visual Studios Resx generierte Datei. Ich habe öffentliche Token und die Schema-Mappings entfernt. Das Schema-Mapping ist es, Ihnen zu helfen beim Erstellen / Ändern dieser Dateien. Zur Demonstration und Einfachheit Ich habe es abgezogen.

<?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>

Für jeden Typ Byte oder Zeichenfolge umfassen die folgenden Daten. Wobei Name der Name ist möchten Sie Zugriff durch und Wert ist eitehr ein Verwandter oder harten Pfad:

<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>

Stellen Sie Ihre Ressource zu einer einzigen Ressource-Manager-Datei und schließen Sie in Ihrem Projekt

resgen /compile myrex.resx

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

Sie haben einen Ressourcenmanager in Ihrem Programm den Zugriff auf diese Dateien zu erstellen. Wenn Sie einen stark typisierte Ressourcen-Manager wollen, müssen Sie die Resource.Designer Klasse aus Ihrem Projekt folgen und die Datei ändern. Wenn Sie einen einfachen Ressource-Manager wollen einfach verwenden GetString oder GetBytes.

Dim rm As New ResourceManager("rmc", [Assembly].GetExecutingAssembly())
day = rm.GetString("mytext")
o = rm.GetObject("mylibrary.dll")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top