Megosztás a következőn keresztül:


Erőforrásfájlok létrehozása .NET-alkalmazásokhoz

Erőforrásokat, például sztringeket, képeket vagy objektumadatokat is felvehet az erőforrásfájlokba, hogy könnyen elérhetővé tegye őket az alkalmazás számára. A .NET-keretrendszer ötféleképpen hozhat létre erőforrásfájlokat:

  • Sztringerőforrásokat tartalmazó szövegfájl létrehozása. Az erőforrásfájl-generátor (resgen.exe) használatával bináris erőforrásfájl (.resources) fájllá alakíthatja a szövegfájlt. Ezután beágyazhatja a bináris erőforrásfájlt egy végrehajtható alkalmazásba vagy egy alkalmazástárba egy nyelvi fordítóval, vagy beágyazhatja egy műholdas szerelvénybe a Assembly Linker (Al.exe) használatával. További információkért tekintse meg a Szövegfájlok szakaszban található Erőforrások szakaszt .

  • Hozzon létre egy XML-erőforrásfájlt (.resx), amely sztring-, kép- vagy objektumadatokat tartalmaz. A Resource File Generator (resgen.exe) használatával bináris erőforrásfájllá (.resources) konvertálhatja a .resx fájlt. Ezután beágyazhatja a bináris erőforrásfájlt egy végrehajtható alkalmazásba vagy egy alkalmazástárba egy nyelvi fordítóval, vagy beágyazhatja egy műholdas szerelvénybe a Assembly Linker (Al.exe) használatával. További információ: Erőforrások a .resx Files szakaszban.

  • Hozzon létre egy XML-erőforrást (.resx) programozott módon a System.Resources névtérben lévő típusok használatával. Létrehozhat egy .resx fájlt, számba veheti az erőforrásokat, és név szerint lekérhet bizonyos erőforrásokat. További információ: A .resx fájlok programozott használata.

  • Bináris erőforrásfájl (.resources) létrehozása programozott módon. Ezután beágyazhatja a fájlt egy végrehajtható alkalmazásba vagy egy alkalmazástárba egy nyelvi fordítóval, vagy beágyazhatja egy műholdas szerelvénybe a Assembly Linker (Al.exe) használatával. További információ: Erőforrások a .resources Files szakaszban.

  • A Visual Studióval létrehozhat egy erőforrásfájlt, és belefoglalhatja a projektbe. A Visual Studio egy erőforrás-szerkesztőt biztosít, amely lehetővé teszi az erőforrások hozzáadását, törlését és módosítását. Fordításkor az erőforrásfájl automatikusan bináris .resources fájllá alakul, és egy alkalmazásszerelvénybe vagy műholdas szerelvénybe ágyazódik. További információ: Erőforrásfájlok a Visual Studio szakaszban.

Erőforrások szövegfájlokban

Szöveges (.txt vagy .restext) fájlokkal csak sztringerőforrásokat tárolhat. Nem sztring típusú erőforrások esetén használjon .resx fájlokat, vagy hozza létre őket programozott módon. A sztringerőforrásokat tartalmazó szövegfájlok formátuma a következő:

# This is an optional comment.
name = value

; This is another optional comment.
name = value

; The following supports conditional compilation if X is defined.
#ifdef X
name1=value1
name2=value2
#endif

# The following supports conditional compilation if Y is undefined.
#if !Y
name1=value1
name2=value2
#endif

A .txt és a .restext fájlok erőforrásfájl-formátuma megegyezik. A .restext fájlkiterjesztés csupán arra szolgál, hogy a szövegfájlok azonnal azonosíthatók legyenek szövegalapú erőforrásfájlokként.

A sztringerőforrások név/érték párként jelennek meg, ahol a név egy olyan sztring, amely azonosítja az erőforrást, az érték pedig az az erőforrás-sztring, amelyet akkor ad vissza, amikor nevet ad át egy erőforrás-lekérési módszernek, példáulResourceManager.GetString. a nevet és az értéket egyenlő előjellel (=) kell elválasztani. Példa:

FileMenuName=File
EditMenuName=Edit
ViewMenuName=View
HelpMenuName=Help

Figyelemfelhívás

Ne használjon erőforrásfájlokat jelszavak, biztonsági bizalmas adatok vagy személyes adatok tárolására.

A szövegfájlokban üres sztringek (vagyis olyan erőforrás, amelynek értéke String.Empty) engedélyezettek. Példa:

EmptyString=

A .NET-keretrendszer 4.5-ös verziójától kezdve a .NET Core minden verziójában a szöveges fájlok támogatják a feltételes fordítást a szimbólumokkal és #if !#endif szimbólumokkal.#ifdef#endif Ezután a /define kapcsolóval a Resource File Generator (resgen.exe) segítségével definiálhat szimbólumokat. Minden erőforrásnak saját #ifdefszimbólumra#endif vagy#if ! szimbólumra#endif van szüksége. Ha utasítást és szimbólumot #ifdef használ, a társított erőforrás szerepel a .resources fájlban, ellenkező esetben ez nem szerepel benne. Ha nem definiált utasítást #if ! és szimbólumot használ, a társított erőforrás szerepel az .resources fájlban, ellenkező esetben ez nem szerepel benne.

A megjegyzések szövegfájlokban nem kötelezőek, és a sor elején pontosvessző (;) vagy fontjel (#) előzi meg. A megjegyzéseket tartalmazó sorok bárhol elhelyezhetők a fájlban. A megjegyzések nem szerepelnek a Resource File Generator (resgen.exe) használatával létrehozott lefordított .resources fájlban.

A szövegfájlokban lévő üres sorok üres területnek minősülnek, és figyelmen kívül hagyják.

Az alábbi példa két sztringerőforrást határoz meg, amelyek neve OKButton és CancelButtonneve.

#Define resources for buttons in the user interface.
OKButton=OK
CancelButton=Cancel

Ha a szövegfájl ismétlődő névpéldányokat tartalmaz, az erőforrásfájl-generátor (resgen.exe) figyelmeztetést jelenít meg, és figyelmen kívül hagyja a második nevet.

az érték nem tartalmazhat új sorkarakterek, de használhat C nyelvstílusú feloldó karaktereket, például \n egy új sort és \t egy tabulátort. Perjel karaktert is megadhat, ha az elszabadult (például "\\"). Emellett egy üres sztring is engedélyezett.

Mentse az erőforrásokat szöveges fájlformátumban UTF-8 kódolással vagy UTF-16 kódolással kis- vagy nagy végű bájtsorrendben. A .txt fájlokat .resources fájllá konvertáló Resource File Generator (resgen.exe) azonban alapértelmezés szerint UTF-8-ként kezeli a fájlokat. Ha azt szeretné, hogy Resgen.exe felismerjen egy UTF-16-tal kódolt fájlt, a fájl elején egy Unicode bájtsorrendjelet (U+FEFF) kell tartalmaznia.

Ha szöveges formátumban szeretne beágyazni egy erőforrásfájlt .NET-szerelvénybe, a fájlt bináris erőforrásfájllá (.resources) kell konvertálnia a Resource File Generator (resgen.exe) használatával. Ezután a .resources fájlt beágyazhatja egy .NET-szerelvénybe egy nyelvi fordítóval, vagy beágyazhatja egy műholdas szerelvénybe a Assembly Linker (Al.exe) használatával.

Az alábbi példa egy GreetingResources.txt nevű erőforrásfájlt használ egy egyszerű ""Helló világ!" alkalmazás" konzolalkalmazáshoz. A szövegfájl két sztringet határoz meg, amelyek greetingarra kérik a felhasználót, prompt hogy adja meg a nevét, és jelenítsen meg egy üdvözlést.

# GreetingResources.txt
# A resource file in text format for a "Hello World" application.
#
# Initial prompt to the user.
prompt=Enter your name:
# Format string to display the result.
greeting=Hello, {0}!

A szövegfájl .resources fájllá alakul a következő paranccsal:

resgen GreetingResources.txt

Az alábbi példa egy olyan konzolalkalmazás forráskódját mutatja be, amely a .resources fájlt használja a felhasználónak küldött üzenetek megjelenítéséhez.

using System;
using System.Reflection;
using System.Resources;

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("GreetingResources",
                               typeof(Example).Assembly);
      Console.Write(rm.GetString("prompt"));
      string name = Console.ReadLine();
      Console.WriteLine(rm.GetString("greeting"), name);
   }
}
// The example displays output like the following:
//       Enter your name: Wilberforce
//       Hello, Wilberforce!
Imports System.Reflection
Imports System.Resources

Module Example
    Public Sub Main()
        Dim rm As New ResourceManager("GreetingResources",
                                      GetType(Example).Assembly())
        Console.Write(rm.GetString("prompt"))
        Dim name As String = Console.ReadLine()
        Console.WriteLine(rm.GetString("greeting"), name)
    End Sub
End Module
' The example displays output like the following:
'       Enter your name: Wilberforce
'       Hello, Wilberforce!

Ha Visual Basicet használ, és a forráskódfájl neve Greeting.vb, a következő parancs létrehoz egy végrehajtható fájlt, amely tartalmazza a beágyazott .resources fájlt:

vbc greeting.vb -resource:GreetingResources.resources

Ha C#-ot használ, és a forráskódfájl neve Greeting.cs, a következő parancs létrehoz egy végrehajtható fájlt, amely tartalmazza a beágyazott .resources fájlt:

csc greeting.cs -resource:GreetingResources.resources

Erőforrások .resx fájlokban

A szöveges fájloktól eltérően, amelyek csak sztringerőforrások tárolására képesek, az XML-erőforrásfájlok (.resx) sztringeket, bináris adatokat, például képeket, ikonokat és hangklipeket, valamint programozott objektumokat tárolhatnak. A .resx fájl egy szabványos fejlécet tartalmaz, amely leírja az erőforrás-bejegyzések formátumát, és megadja az adatok elemzéséhez használt XML verziószámozási adatait. Az erőforrásfájl adatai az XML-fejlécet követik. Minden adatelem egy címke által tartalmazott data név-érték párból áll. Az name attribútum határozza meg az erőforrás nevét, a beágyazott value címke pedig az erőforrás értékét. A sztringadatok esetében a value címke tartalmazza a sztringet.

Az alábbi data címke például egy sztringerőforrást prompt határoz meg, amelynek értéke "Adja meg a nevét:".

<data name="prompt" xml:space="preserve">
  <value>Enter your name:</value>
</data>

Figyelmeztetés

Ne használjon erőforrásfájlokat jelszavak, biztonsági bizalmas adatok vagy személyes adatok tárolására.

Erőforrás-objektumok esetében az adatcímke tartalmaz egy type attribútumot, amely az erőforrás adattípusát jelzi. Bináris adatokat tartalmazó objektumok esetén a data címke tartalmaz egy mimetype attribútumot is, amely a base64 bináris adatok típusát jelzi.

Feljegyzés

Minden .resx fájl bináris szerializálási formázó használatával hozza létre és elemzi a bináris adatokat egy adott típushoz. Emiatt a .resx fájl érvénytelenné válhat, ha egy objektum bináris szerializálási formátuma nem kompatibilis módon változik.

Az alábbi példa egy erőforrást és bitképet tartalmazó Int32 .resx fájl egy részét mutatja be.

<data name="i1" type="System.Int32, mscorlib">
  <value>20</value>
</data>

<data name="flag" type="System.Drawing.Bitmap, System.Drawing,
    Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    mimetype="application/x-microsoft.net.object.bytearray.base64">
  <value>
    AAEAAAD/////AQAAAAAAAAAMAgAAADtTeX…
  </value>
</data>

Fontos

Mivel a .resx fájloknak jól formázott XML-fájlokat kell tartalmazniuk előre definiált formátumban, nem javasoljuk a .resx fájlok manuális használatát, különösen akkor, ha a .resx fájlok nem sztringeket tartalmaznak. Ehelyett a Visual Studio egy transzparens felületet biztosít a .resx fájlok létrehozásához és kezeléséhez. További információ: Erőforrásfájlok a Visual Studio szakaszban. A .resx fájlokat programozott módon is létrehozhatja és módosíthatja. További információt a .resx fájlok programozott módon történő használatával kapcsolatban talál.

Erőforrások a .resources fájlokban

Az System.Resources.ResourceWriter osztály használatával programozott módon hozhat létre bináris erőforrásfájlt (.resources) közvetlenül a kódból. A Resource File Generator (resgen.exe) használatával is létrehozhat egy .resources fájlt egy szövegfájlból vagy egy .resx fájlból. A .resources fájl a sztringadatok mellett bináris adatokat (bájttömböket) és objektumadatokat is tartalmazhat. A .resources-fájlok programozott létrehozásához a következő lépések szükségesek:

  1. Hozzon létre egy ResourceWriter egyedi fájlnevet tartalmazó objektumot. Ezt úgy teheti meg, hogy megad egy fájlnevet vagy egy fájlstreamet egy ResourceWriter osztálykonstruktornak.

  2. Hívja meg a metódus egyik túlterhelését az ResourceWriter.AddResource egyes elnevezett erőforrásokhoz, hogy hozzáadják a fájlt. Az erőforrás lehet sztring, objektum vagy bináris adatok gyűjteménye (bájttömb).

  3. Hívja meg a metódust ResourceWriter.Close az erőforrások fájlba írásához és az ResourceWriter objektum bezárásához.

Feljegyzés

Ne használjon erőforrásfájlokat jelszavak, biztonsági bizalmas adatok vagy személyes adatok tárolására.

Az alábbi példa programozott módon létrehoz egy CarResources.resources nevű .resources fájlt, amely hat sztringet, egy ikont és két alkalmazás által definiált objektumot (két Automobile objektumot) tárol. A Automobile példában definiált és példányosított osztály az attribútummal SerializableAttribute van megjelölve, amely lehetővé teszi, hogy a bináris szerializálási formázó megőrizze.

using System;
using System.Drawing;
using System.Resources;

[Serializable()] public class Automobile
{
   private string carMake;
   private string carModel;
   private int carYear;
   private int carDoors;
   private int carCylinders;

   public Automobile(string make, string model, int year) :
                     this(make, model, year, 0, 0)
   { }

   public Automobile(string make, string model, int year,
                     int doors, int cylinders)
   {
      this.carMake = make;
      this.carModel = model;
      this.carYear = year;
      this.carDoors = doors;
      this.carCylinders = cylinders;
   }

   public string Make {
      get { return this.carMake; }
   }

   public string Model {
      get { return this.carModel; }
   }

   public int Year {
      get { return this.carYear; }
   }

   public int Doors {
      get {
         return this.carDoors; }
   }

   public int Cylinders {
      get {
         return this.carCylinders; }
   }
}

public class Example
{
   public static void Main()
   {
      // Instantiate an Automobile object.
      Automobile car1 = new Automobile("Ford", "Model N", 1906, 0, 4);
      Automobile car2 = new Automobile("Ford", "Model T", 1909, 2, 4);
      // Define a resource file named CarResources.resx.
      using (ResourceWriter rw = new ResourceWriter(@".\CarResources.resources"))
      {
         rw.AddResource("Title", "Classic American Cars");
         rw.AddResource("HeaderString1", "Make");
         rw.AddResource("HeaderString2", "Model");
         rw.AddResource("HeaderString3", "Year");
         rw.AddResource("HeaderString4", "Doors");
         rw.AddResource("HeaderString5", "Cylinders");
         rw.AddResource("Information", SystemIcons.Information);
         rw.AddResource("EarlyAuto1", car1);
         rw.AddResource("EarlyAuto2", car2);
      }
   }
}
Imports System.Drawing
Imports System.Resources

<Serializable()> Public Class Automobile
    Private carMake As String
    Private carModel As String
    Private carYear As Integer
    Private carDoors AS Integer
    Private carCylinders As Integer

    Public Sub New(make As String, model As String, year As Integer)
        Me.New(make, model, year, 0, 0)
    End Sub

    Public Sub New(make As String, model As String, year As Integer,
                   doors As Integer, cylinders As Integer)
        Me.carMake = make
        Me.carModel = model
        Me.carYear = year
        Me.carDoors = doors
        Me.carCylinders = cylinders
    End Sub

    Public ReadOnly Property Make As String
        Get
            Return Me.carMake
        End Get
    End Property

    Public ReadOnly Property Model As String
        Get
            Return Me.carModel
        End Get
    End Property

    Public ReadOnly Property Year As Integer
        Get
            Return Me.carYear
        End Get
    End Property

    Public ReadOnly Property Doors As Integer
        Get
            Return Me.carDoors
        End Get
    End Property

    Public ReadOnly Property Cylinders As Integer
        Get
            Return Me.carCylinders
        End Get
    End Property
End Class

Module Example
    Public Sub Main()
        ' Instantiate an Automobile object.
        Dim car1 As New Automobile("Ford", "Model N", 1906, 0, 4)
        Dim car2 As New Automobile("Ford", "Model T", 1909, 2, 4)
        ' Define a resource file named CarResources.resx.
        Using rw As New ResourceWriter(".\CarResources.resources")
            rw.AddResource("Title", "Classic American Cars")
            rw.AddResource("HeaderString1", "Make")
            rw.AddResource("HeaderString2", "Model")
            rw.AddResource("HeaderString3", "Year")
            rw.AddResource("HeaderString4", "Doors")
            rw.AddResource("HeaderString5", "Cylinders")
            rw.AddResource("Information", SystemIcons.Information)
            rw.AddResource("EarlyAuto1", car1)
            rw.AddResource("EarlyAuto2", car2)
        End Using
    End Sub
End Module

A .resources fájl létrehozása után beágyazhatja egy futtatható végrehajtható fájlba vagy tárba a nyelvi fordító kapcsolójával/resource, vagy beágyazhatja egy műholdas szerelvénybe a Assembly Linker (Al.exe) használatával.

Erőforrásfájlok a Visual Studióban

Amikor hozzáad egy erőforrásfájlt a Visual Studio-projekthez, a Visual Studio létrehoz egy .resx fájlt a projektkönyvtárban. A Visual Studio olyan erőforrás-szerkesztőket biztosít, amelyek lehetővé teszik sztringek, képek és bináris objektumok hozzáadását. Mivel a szerkesztők csak statikus adatok kezelésére lettek tervezve, programozott objektumok tárolására nem használhatók; objektumadatokat kell írnia egy .resx fájlba vagy egy .resources fájlba programozott módon. További információt a .resx fájlok programozott és az Erőforrások a .resources fájlok szakaszban című szakaszban talál.

Ha honosított erőforrásokat ad hozzá, adja meg nekik ugyanazt a gyökérfájlnevet, mint a fő erőforrásfájl. A kultúrát a fájlnévben is meg kell jelölnie. Ha például egy Resource.resx nevű erőforrásfájlt ad hozzá, létrehozhat egy Resources.en-US.resx és Resources.fr-FR.resx nevű erőforrásfájlt is, hogy az angol (Egyesült Államok) és a francia (franciaországi) kultúrák honosított erőforrásait tárolja. Az alkalmazás alapértelmezett kulturális környezetét is meg kell jelölnie. Ez az a kultúra, amelynek erőforrásait akkor használja a rendszer, ha egy adott kultúrához nem található honosított erőforrás.

Az alapértelmezett kultúra megadásához a Visual Studióban Megoldáskezelő:

  • Nyissa meg a projekt tulajdonságait, kattintson a jobb gombbal a projektre, és válassza a Tulajdonságok (vagy Alt + Enter a projekt kiválasztásakor).
  • Válassza a Csomag fület.
  • Az Általános területen válassza ki a megfelelő nyelvet/kultúrát a Közgyűlés semleges nyelvvezérlőjében.
  • Mentse a módosításokat.

Fordításkor a Visual Studio először bináris erőforrásfájlokká (.resources) konvertálja a projekt .resx fájljait, és a projekt obj könyvtárának alkönyvtárában tárolja őket. A Visual Studio beágyazza azokat az erőforrásfájlokat, amelyek nem tartalmaznak honosított erőforrásokat a projekt által létrehozott főszerelvényben. Ha bármely erőforrásfájl honosított erőforrásokat tartalmaz, a Visual Studio minden honosított kultúrához külön műholdas szerelvényekbe ágyazza be őket. Ezután minden műholdas szerelvényt egy olyan könyvtárban tárol, amelynek a neve megfelel a honosított kultúrának. A honosított angol (Egyesült Államok) erőforrások például egy műholdas szerelvényben vannak tárolva az USA-beli alkönyvtárban.

Lásd még