Műholdas szerelvények létrehozása .NET-alkalmazásokhoz

Az erőforrásfájlok központi szerepet játszanak a honosított alkalmazásokban. Lehetővé teszik, hogy egy alkalmazás sztringeket, képeket és egyéb adatokat jelenítsen meg a felhasználó nyelvén és kultúrájában, és alternatív adatokat biztosítson, ha a felhasználó nyelvének vagy kultúrájának erőforrásai nem érhetők el. A .NET egy küllős modellt használ a honosított erőforrások megkereséséhez és lekéréséhez. A központ az a fő szerelvény, amely tartalmazza a nem honosítható végrehajtható kódot és az erőforrásokat egyetlen kultúrához, amelyet semleges vagy alapértelmezett kultúrának neveznek. Az alapértelmezett kultúra az alkalmazás tartalék kultúrája; akkor használatos, ha nem érhetők el honosított erőforrások. A NeutralResourcesLanguageAttribute attribútumot használja az alkalmazás alapértelmezett kultúrájának megadásához. Minden küllő egy műholdas szerelvényhez csatlakozik, amely egyetlen honosított kultúrához tartozó erőforrásokat tartalmaz, de nem tartalmaz kódot. Mivel a műholdas szerelvények nem részei a főszerelvénynek, egyszerűen frissítheti vagy lecserélheti az adott kultúrának megfelelő erőforrásokat anélkül, hogy lecserélte volna az alkalmazás fő szerelvényét.

Feljegyzés

Az alkalmazás alapértelmezett kultúrájának erőforrásai műholdas szerelvényben is tárolhatók. Ehhez a NeutralResourcesLanguageAttribute attribútumot a következő értékhez UltimateResourceFallbackLocation.Satellite rendelheti.

Műholdas szerelvény neve és helye

A küllős modellhez szükség van arra, hogy az erőforrásokat meghatározott helyeken helyezze el, hogy azok könnyen elhelyezhetők és használhatók legyenek. Ha nem a várt módon fordítja le és adja el az erőforrásokat, vagy ha nem a megfelelő helyre helyezi őket, a közös nyelvi futtatókörnyezet nem fogja tudni megtalálni őket, és ehelyett az alapértelmezett kultúra erőforrásait fogja használni. A .NET-erőforrás-kezelőt a ResourceManager típus jelöli, és a honosított erőforrások automatikus elérésére szolgál. Az erőforrás-kezelőnek a következőkre van szüksége:

  • Egyetlen műholdas szerelvénynek tartalmaznia kell egy adott kultúrához szükséges összes erőforrást. Más szóval több .txt vagy .resx fájlt kell egyetlen bináris .resources fájlba lefordítani.

  • Az alkalmazáskönyvtárban külön alkönyvtárnak kell lennie minden olyan honosított kultúrához, amely az adott kultúra erőforrásait tárolja. Az alkönyvtár nevének meg kell egyeznie a kultúra nevével. Alternatív megoldásként a műhold-összeállításokat a globális összeállítási gyorsítótárban is tárolhatja. Ebben az esetben a szerelvény erős nevének kulturális információs összetevőjének meg kell jelölnie annak kultúráját. További információ: Műholdas szerelvények telepítése a globális szerelvénygyorsítótárban.

    Feljegyzés

    Ha az alkalmazás szubkultúrákhoz tartalmaz erőforrásokat, helyezze az egyes szubkultúrákat egy külön alkönyvtárba az alkalmazáskönyvtár alatt. A szubkultúrákat ne helyezze el alkönyvtárakba a fő kultúra könyvtára alatt.

  • A műholdas szerelvénynek ugyanazzal a névvel kell rendelkeznie, mint az alkalmazásnak, és a ".resources.dll" fájlnévkiterjesztést kell használnia. Ha például egy alkalmazás neve Example.exe, az egyes műholdszerelvények nevét Example.resources.dll kell megadni. A műholdas szerelvény neve nem jelzi az erőforrásfájlok kultúráját. A műholdas szerelvény azonban megjelenik egy olyan könyvtárban, amely meghatározza a kultúrát.

  • A műholdas szerelvény kultúrájával kapcsolatos információkat fel kell venni a szerelvény metaadataiba. A kultúra nevének a műholdas összeállítás metaadataiban való tárolásához megadja a /culture opciót, amikor az Assembly Linker használatával ágyazza be az erőforrásokat a műholdas összeállításba.

Az alábbi ábra egy mintakönyvtár-struktúrát és elhelyezési követelményeket mutat be a globális szerelvény-gyorsítótárba nem telepített alkalmazásokhoz. A .txt és .resources kiterjesztésű elemek nem lesznek a végső alkalmazással együtt szállítva. Ezek a köztes erőforrásfájlok a végső műholdas erőforrás-szerelvények létrehozásához. Ebben a példában a .resx fájlokat helyettesítheti a .txt fájlokra. További információ: Erőforrások csomagolása és üzembe helyezése.

Az alábbi képen a műhold összeszerelési könyvtára látható.

Egy műholdgyűjtemény-könyvtár lokalizált kultúrák alkönyvtáraival.

Műholdas szerelvények összeállítása

Az erőforrásfájl-generátor (resgen.exe) használatával olyan szövegfájlokat vagy XML-fájlokat (.resx) állíthat össze, amelyek erőforrásokat tartalmaznak bináris .resources fájlokhoz. Ezután az Assembly Linker (al.exe) használatával a .resources fájlokat mellék-összeállításokba fordíthatja. al.exe létrehoz egy szerelvényt a megadott .resources fájlokból. A műholdas szerelvények csak erőforrásokat tartalmazhatnak; nem tartalmazhatnak végrehajtható kódot.

Az alábbi al.exe parancs létrehoz egy műholdas szerelvényt az alkalmazáshoz Example a német resources file strings.de.resources fájlból.

al -target:lib -embed:strings.de.resources -culture:de -out:Example.resources.dll

Az alábbi al.exe parancs egy műholdas szerelvényt is létrehoz az alkalmazáshoz Example a strings.de.resources fájlból. A /template beállítás hatására a műholdas szerelvény örökli az összes szerelvény metaadatait, kivéve a szülőszerelvény kulturális adatait (Example.dll).

al -target:lib -embed:strings.de.resources -culture:de -out:Example.resources.dll -template:Example.dll

Az alábbi táblázat részletesebben ismerteti az ezekben a parancsokban használt al.exe beállításokat:

Lehetőség Leírás
-target:lib Kijelöli, hogy a műhold-összeállítás egy könyvtárfájlba (.dll) kerül lefordításra. Mivel egy műholdas szerelvény nem tartalmaz végrehajtható kódot, és nem az alkalmazás fő szerelvénye, a műholdas szerelvényeket DLL-ként kell mentenie.
-embed:strings.de.resources Meghatározza a beágyazandó erőforrásfájl nevét, amikor az al.exe lefordítja a szerelvényt. Több .resources fájlt is beágyazhat egy műholdas szerelvénybe, de ha a küllős modellt követi, minden kultúrához össze kell állítania egy műholdas szerelvényt. Sztringekhez és objektumokhoz azonban külön .resources fájlokat hozhat létre.
-culture:de A lefordítandó erőforrás kulturális környezetét határozza meg. A közös nyelvi futtatókörnyezet ezt az információt használja, amikor egy adott kultúrához tartozó erőforrásokat keres. Ha kihagyja ezt a beállítást, al.exe továbbra is lefordítja az erőforrást, de a futtatókörnyezet nem fogja tudni megtalálni, amikor egy felhasználó megkeresi.
-out:Example.resources.dll Megadja a kimeneti fájl nevét. A névnek a baseName.resources.kiterjesztés elnevezési standardot kell követnie, ahol baseName a fő-összeállítás neve, és kiterjesztés érvényes fájlnév-kiterjesztés (például .dll). A futtatókörnyezet nem tudja meghatározni egy műholdas szerelvény kultúráját a kimeneti fájl neve alapján; a /culture kapcsolót kell használnia a beállítás megadásához.
-template:Example.dll Olyan szerelvényt ad meg, amelyből a műholdas szerelvény örökli az összes szerelvény metaadatait a kulturális mező kivételével. Ez a beállítás csak akkor érinti a műholdas összeállításokat, ha egy erős névvel rendelkező összeállítást ad meg.

A al.exe elérhető lehetőségek teljes listáját lásd: Assembly Linker (al.exe).

Feljegyzés

Előfordulhatnak olyan esetek, amikor a .NET Core MSBuild feladatot szeretné használni a szatellit-összeállítások fordításához, még akkor is, ha a .NET Framework a célja. Előfordulhat például, hogy a C#-fordító determinisztikus beállításával összehasonlíthatja a különböző buildekből származó szerelvényeket. Ebben az esetben állítsa be a GenerateSatelliteAssembliesForCore értéket a true fájlban úgy, hogy a Al.exe (Assembly Linker) helyett a csc.exe programmal legyenek műholdas assembly-k generálva.

<Project>
    <PropertyGroup>
        <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
    </PropertyGroup>
</Project>

A .NET Core MSBuild feladat alapértelmezés szerint al.exe helyett csc.exe használ a műholdas szerelvények létrehozásához. További információért lásd: "Core" műhold-összeállítások generálásának egyszerűsítése.

Példa műholdas összeállításokra

Az alábbiakban egy egyszerű "Hello world" példa látható, amely egy honosított üdvözlést tartalmazó üzenetmezőt jelenít meg. A példa az angol (Egyesült Államok), a francia (Franciaország) és az orosz (Oroszország) kultúrák erőforrásait tartalmazza, a tartalék kultúrája pedig az angol. A példa létrehozásához tegye a következőket:

  1. Hozzon létre egy Greeting.resx vagy Greeting.txt nevű erőforrásfájlt, amely az alapértelmezett kultúra erőforrását tartalmazza. Tároljon egyetlen karakterláncot, amelynek neve HelloString és értéke "Hello world!" ebben a fájlban.

  2. Annak jelzéséhez, hogy az angol (en) az alkalmazás alapértelmezett kultúrája, adja hozzá az alábbi System.Resources.NeutralResourcesLanguageAttribute attribútumot az alkalmazás AssemblyInfo-fájljába vagy az alkalmazás fő szerelvényébe lefordítandó fő forráskódfájlhoz.

    [assembly: NeutralResourcesLanguage("en")]
    
    <Assembly: NeutralResourcesLanguage("en")>
    
  3. További kultúrák (en-USfr-FRés ru-RU) támogatásának hozzáadása az alkalmazáshoz az alábbiak szerint:

    • Az en-US angol (Egyesült Államok) kultúra támogatásához hozzon létre egy Greeting.en-US.resx vagy Greeting.en-US.txt nevű erőforrásfájlt, és tároljon benne egyetlen HelloString nevű karakterláncot, amelynek értéke "Hello világ!".

    • A francia (franciaországifr-FR) kultúra támogatásához hozzon létre egy Greeting.fr-FR.resx vagy Greeting.fr-FR.txt nevű erőforrásfájlt, és tároljon benne egyetlen sztringetHelloString, amelynek értéke "Salut tout le monde!".

    • Az orosz (oroszországi) kultúra megsegítésére ru-RU, hozzon létre egy Greeting.ru-RU.resx vagy Greeting.ru-RU.txt nevű erőforrásfájlt, és tároljon benne egyetlen sztringet HelloString, amelynek értéke "Всем привет!".

  4. A resgen.exe használatával lefordíthatja az egyes szöveg- vagy XML-erőforrásfájlokat egy bináris .resources fájlba. A kimenet olyan fájlok készlete, amelyek gyökérfájlnevük megegyezik a .resx vagy a .txt fájl nevével, de .resources kiterjesztéssel rendelkeznek. Ha a példát a Visual Studióval hozza létre, a rendszer automatikusan kezeli a fordítási folyamatot. Ha nem a Visual Studiót használja, futtassa az alábbi parancsokat a .resx fájlok .resources fájlokba való fordításához:

    resgen Greeting.resx
    resgen Greeting.en-us.resx
    resgen Greeting.fr-FR.resx
    resgen Greeting.ru-RU.resx
    

    Ha az erőforrások XML-fájlok helyett szövegfájlokban találhatók, cserélje le a .resx bővítményt .txt.

  5. Fordítsa le a következő forráskódot az alapértelmezett kultúra erőforrásaival együtt az alkalmazás fő szerelvényébe:

    Fontos

    Ha a példa létrehozásához a Visual Studio helyett a parancssort használja, módosítsa az osztálykonstruktor hívását a ResourceManager következőre: ResourceManager rm = new ResourceManager("Greeting", typeof(Example).Assembly);

    using System;
    using System.Globalization;
    using System.Reflection;
    using System.Resources;
    using System.Threading;
    using System.Windows.Forms;
    
    class Example
    {
       static void Main()
       {
          // Create array of supported cultures
          string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU"};
          Random rnd = new Random();
          int cultureNdx = rnd.Next(0, cultures.Length);
          CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
    
          try {
             CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]);
             Thread.CurrentThread.CurrentCulture = newCulture;
             Thread.CurrentThread.CurrentUICulture = newCulture;
             ResourceManager rm = new ResourceManager("Example.Greeting",
                                                      typeof(Example).Assembly);
             string greeting = String.Format("The current culture is {0}.\n{1}",
                                             Thread.CurrentThread.CurrentUICulture.Name,
                                             rm.GetString("HelloString"));
    
             MessageBox.Show(greeting);
          }
          catch (CultureNotFoundException e) {
             Console.WriteLine($"Unable to instantiate culture {e.InvalidCultureName}");
          }
          finally {
             Thread.CurrentThread.CurrentCulture = originalCulture;
             Thread.CurrentThread.CurrentUICulture = originalCulture;
          }
       }
    }
    
    Imports System.Globalization
    Imports System.Resources
    Imports System.Threading
    
    Module Module1
    
        Sub Main()
            ' Create array of supported cultures
            Dim cultures() As String = {"en-CA", "en-US", "fr-FR", "ru-RU"}
            Dim rnd As New Random()
            Dim cultureNdx As Integer = rnd.Next(0, cultures.Length)
            Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
    
            Try
                Dim newCulture As New CultureInfo(cultures(cultureNdx))
                Thread.CurrentThread.CurrentCulture = newCulture
                Thread.CurrentThread.CurrentUICulture = newCulture
                Dim greeting As String = String.Format("The current culture is {0}.{1}{2}",
                                                       Thread.CurrentThread.CurrentUICulture.Name,
                                                       vbCrLf, My.Resources.Greetings.HelloString)
    
                MsgBox(greeting)
            Catch e As CultureNotFoundException
                Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName)
            Finally
                Thread.CurrentThread.CurrentCulture = originalCulture
                Thread.CurrentThread.CurrentUICulture = originalCulture
            End Try
        End Sub
    End Module
    

    Ha az alkalmazás neve Példa , és a parancssorból származik, a C#-fordító parancsa a következő:

    csc Example.cs -res:Greeting.resources
    

    A megfelelő Visual Basic fordítóparancs a következő:

    vbc Example.vb -res:Greeting.resources
    
  6. Hozzon létre egy alkönyvtárat a fő alkalmazáskönyvtárban az alkalmazás által támogatott minden honosított kultúrához. Létre kell hoznia egy en-US-t, egy fr-FR-t és egy ru-RU alkönyvtárat. A Visual Studio automatikusan létrehozza ezeket az alkönyvtárakat a fordítási folyamat részeként.

  7. Ágyazza be az egyes kultúraspecifikus .resources fájlokat segédszerelvényekbe, és mentse őket a megfelelő könyvtárba. Az egyes .resources-fájlokhoz a következő parancsot kell végrehajtani:

    al -target:lib -embed:Greeting.culture.resources -culture:culture -out:culture\Example.resources.dll
    

    ahol a kultúra annak a kultúrának a neve, amelynek erőforrásait a műholdas szerelvény tartalmazza. A Visual Studio automatikusan kezeli ezt a folyamatot.

Ezután futtathatja a példát. Véletlenszerűen teszi az egyik támogatott kultúrát a jelenlegi kultúrává, és lokalizált üdvözlést jelenít meg.

Műholdas összeállítások telepítése a globális gyűjteménytárban

Ahelyett, hogy egy helyi alkalmazás alkönyvtárában telepítené az assembly-ket, telepítheti őket a globális assembly-gyorsítótárba. Ez különösen akkor hasznos, ha több alkalmazás által használt osztálykódtárakat és osztálytár-erőforrás-szerelvényeket használ.

Az összetevők globális assembly gyorsítótárban való telepítéséhez erős nevekre van szükség. Az erős névvel ellátott szerelvények érvényes nyilvános/titkos kulcspárokkal vannak aláírva. A futtatókörnyezet által a kötési kérések teljesítéséhez használandó szerelvény meghatározásához használt verzióinformációkat tartalmazzák. További információkért az erős nevekről és a verziószámozásról lásd: Assembly versioning. Ha többet szeretne megtudni az erős nevekről, lásd az Erős nevű összeszerelések című témakört.

Alkalmazás fejlesztésekor nem valószínű, hogy hozzáfér a végső nyilvános/titkos kulcspárhoz. Ha egy műholdas szerelvényt szeretne telepíteni a globális szerelvény-gyorsítótárba, és meggyőződni arról, hogy az elvárt módon működik, használhat egy késleltetett aláírás nevű technikát. Ha késlelteti egy assembly aláírását, a fordítási időben helyet foglal a fájlban az erős név aláírás számára. A tényleges aláírás későbbre halasztódik, amikor a végső nyilvános/titkos kulcspár elérhető. További információért a késleltetett aláírásról, tekintse meg a Szerelvény aláírásának késleltetése című témát.

A nyilvános kulcs beszerzése

Egy szerelvény aláírásának késleltetéséhez hozzáféréssel kell rendelkeznie a nyilvános kulcshoz. Beszerezheti a valódi nyilvános kulcsot a cégen belüli szervezettől, amely elvégezi a végleges aláírást, vagy létrehozhat egy nyilvános kulcsot az Erős név eszközzel (sn.exe) keresztül.

A következő Sn.exe parancs létrehoz egy nyilvános/titkos kulcspár tesztelését. A –k beállítás azt határozza meg, hogy Sn.exe hozzon létre egy új kulcspárt, és mentse egy TestKeyPair.snk nevű fájlba.

sn –k TestKeyPair.snk

A nyilvános kulcsot kinyerheti a tesztkulcspárt tartalmazó fájlból. A következő parancs kinyeri a nyilvános kulcsot a TestKeyPair.snk fájlból, és menti a PublicKey.snk fájlban:

sn –p TestKeyPair.snk PublicKey.snk

Gyűlés aláírásának késleltetése

A nyilvános kulcs beszerzése vagy létrehozása után az assembly linker (al.exe) használatával fordíthatja az összeállítást, és megadhatja a késleltetett aláírást.

A következő al.exe parancs egy erős nevűvel ellátott szatellit-összeállítást hoz létre a StringLibrary alkalmazáshoz a strings.ja.resources fájlból.

al -target:lib -embed:strings.ja.resources -culture:ja -out:StringLibrary.resources.dll -delay+ -keyfile:PublicKey.snk

A -delay+ beállítás azt határozza meg, hogy a Assembly Linkernek késleltetnie kell a szerelvény aláírását. A -keyfile beállítás megadja annak a kulcsfájlnak a nevét, amely a szerelvény aláírásának késleltetéséhez használandó nyilvános kulcsot tartalmazza.

Szerelvény újra aláírása

Az alkalmazás üzembe helyezése előtt újra alá kell írnia a késleltetett aláírású műhold-összeállítást a valódi kulcspárral. Ezt a Sn.exe használatával teheti meg.

Az alábbi Sn.exe parancs aláírja StringLibrary.resources.dll a RealKeyPair.snk fájlban tárolt kulcspárral. Az –R opció azt határozza meg, hogy egy korábban aláírt vagy késleltetve aláírt szerelvényt újra alá kell írni.

sn –R StringLibrary.resources.dll RealKeyPair.snk

A műhold-összetevő telepítése a Globális Assembly Cache-ben

Amikor a futtatókörnyezet erőforrásokat keres az erőforrás-visszaesési folyamatban, először a globális verzió-gyűjteményben keres. (További információért lásd az Erőforrások csomagolása és üzembe helyezése cikk "Erőforrás-tartalékfolyamat" című részét.) Amint egy szatellit-assembly erős névvel van aláírva, telepíthető a Globális Szerelvénygyorsítótárba a Globális Szerelvénygyorsítótár eszköz (gacutil.exe) segítségével.

A következő Gacutil.exe parancs telepíti a StringLibrary.resources.dll* a globális szerelvény-gyorsítótárba:

gacutil -i:StringLibrary.resources.dll

A /i beállítás azt határozza meg, hogy Gacutil.exe telepítse a megadott szerelvényt a globális szerelvény-gyorsítótárba. Miután telepítette a műholdas szerelvényt a gyorsítótárba, a benne található erőforrások elérhetővé válnak a műholdas szerelvény használatára tervezett összes alkalmazás számára.

Erőforrások a globális szerelvénygyorsítótárban: egy példa

Az alábbi példa egy .NET-osztálytár metódusával nyer ki és ad vissza egy honosított üdvözlést egy erőforrásfájlból. A kódtár és erőforrásai a globális szerelvény-gyorsítótárban vannak regisztrálva. A példa az angol (Egyesült Államok), a francia (Franciaország), az orosz (Oroszország) és az angol kultúrák erőforrásait tartalmazza. Az alapértelmezett kultúra az angol; az erőforrások a főszerelvényben vannak tárolva. A példa kezdetben nyilvános kulccsal látja el késleltetett aláírással a könyvtárat és a műholdas szerelvényeket, majd újra aláírja őket egy nyilvános/titkos kulcspárral. A példa létrehozásához tegye a következőket:

  1. Ha nem a Visual Studiót használja, a következő Erős név eszköz (Sn.exe) paranccsal hozzon létre egy ResKey.snk nevű nyilvános/privát kulcspárt:

    sn –k ResKey.snk
    

    Ha Visual Studiót használ, a Aláírás lapot a projekt Tulajdonságai párbeszédpanelben használja a kulcsfájl létrehozásához.

  2. A következő Strong Name Tool (Sn.exe) paranccsal hozzon létre egy PublicKey.snk nevű nyilvános kulcsfájlt:

    sn –p ResKey.snk PublicKey.snk
    
  3. Hozzon létre egy Strings.resx nevű erőforrásfájlt, amely az alapértelmezett kultúra erőforrását tartalmazza. Tároljon a fájlban egyetlen karakterláncot Greeting néven, amelynek értéke "Hogy van?"

  4. Ha azt szeretné jelezni, hogy az "en" az alkalmazás alapértelmezett kultúrája, adja hozzá a következő System.Resources.NeutralResourcesLanguageAttribute attribútumot az alkalmazás AssemblyInfo-fájljába vagy az alkalmazás fő szerelvényébe lefordítandó fő forráskódfájlhoz:

    [assembly:NeutralResourcesLanguageAttribute("en")]
    
    <Assembly: NeutralResourcesLanguageAttribute("en")>
    
  5. További kultúrák (az en-US, fr-FR és ru-RU kultúrák) támogatása az alkalmazáshoz az alábbiak szerint:

    • Az "en-US" vagy az angol (Egyesült Államok) kultúra támogatásához hozzon létre egy Strings.en-US.resx vagy Strings.en-US.txt nevű amelynek értéke "Hello!".

    • Az "fr-FR" vagy a francia (Franciaország) kultúra támogatásához hozzon létre egy Strings.fr-FR.resx vagy Strings.fr-FR.txt nevű "Bon jour!".

    • Az "ru-RU" vagy az orosz (Oroszország) kultúra támogatásához hozzon létre egy Strings.ru-RU.resx vagy Strings.ru-RU.txt nevű !".

  6. A resgen.exe használatával lefordíthatja az egyes szöveg- vagy XML-erőforrásfájlokat egy bináris .resources fájlba. A kimenet olyan fájlok készlete, amelyek gyökérfájlnevük megegyezik a .resx vagy a .txt fájl nevével, de .resources kiterjesztéssel rendelkeznek. Ha a példát a Visual Studióval hozza létre, a rendszer automatikusan kezeli a fordítási folyamatot. Ha nem a Visual Studiót használja, futtassa a következő parancsot a .resx fájlok .resources fájlokba való fordításához:

    resgen filename
    

    Ahol a fájlnév az opcionális elérési út, fájlnév és kiterjesztés a .resx vagy szövegfájl esetén.

  7. Állítsa össze a következő forráskódot: StringLibrary.vb vagy StringLibrary.cs, valamint az alapértelmezett kultúra erőforrásait egy késleltetett aláírással rendelkező könyvtár-összeállításba, amelynek neve StringLibrary.dll.

    Fontos

    Ha a példa létrehozásához a Visual Studio helyett a parancssort használja, módosítsa az osztálykonstruktor hívását ResourceManager a következőre ResourceManager rm = new ResourceManager("Strings",typeof(Example).Assembly);.

    using System;
    using System.Globalization;
    using System.Reflection;
    using System.Resources;
    using System.Threading;
    
    [assembly:NeutralResourcesLanguageAttribute("en")]
    
    public class StringLibrary
    {
       public string GetGreeting()
       {
          ResourceManager rm = new ResourceManager("Strings",
                               Assembly.GetAssembly(typeof(StringLibrary)));
          string greeting = rm.GetString("Greeting");
          return greeting;
       }
    }
    
    Imports System.Globalization
    Imports System.Reflection
    Imports System.Resources
    Imports System.Threading
    
    <Assembly: NeutralResourcesLanguageAttribute("en")>
    
    Public Class StringLibrary
        Public Function GetGreeting() As String
            Dim rm As New ResourceManager("Strings", _
                                          Assembly.GetAssembly(GetType(StringLibrary)))
            Dim greeting As String = rm.GetString("Greeting")
            Return greeting
        End Function
    End Class
    

    A C#-fordító parancsa a következő:

    csc -t:library -resource:Strings.resources -delaysign+ -keyfile:publickey.snk StringLibrary.cs
    

    A megfelelő Visual Basic fordítóparancs a következő:

    vbc -t:library -resource:Strings.resources -delaysign+ -keyfile:publickey.snk StringLibrary.vb
    
  8. Hozzon létre egy alkönyvtárat a fő alkalmazáskönyvtárban az alkalmazás által támogatott minden honosított kultúrához. Létre kell hoznia egy en-US-t, egy fr-FR-t és egy ru-RU alkönyvtárat. A Visual Studio automatikusan létrehozza ezeket az alkönyvtárakat a fordítási folyamat részeként. Mivel minden szatellit összeszerelésnek ugyanaz a fájlneve, az alkönyvtárak az egyes kultúraspecifikus szatellit összeszerelések tárolására szolgálnak, amíg alá nem írják őket egy nyilvános/titkos kulcspárral.

  9. Ágyazza be az egyes kultúraspecifikus .resources fájlokat a késleltetetten aláírt műhold-összeállításokba, és mentse őket a megfelelő könyvtárba. Az egyes .resources-fájlokhoz a következő parancsot kell végrehajtani:

    al -target:lib -embed:Strings.culture.resources -culture:culture -out:culture\StringLibrary.resources.dll -delay+ -keyfile:publickey.snk
    

    ahol a kultúra a kultúra neve. Ebben a példában a kultúra neve en-US, fr-FR és ru-RU.

  10. Írja újra alá a StringLibrary.dll fájlt az Erősnév eszközzel (sn.exe) az alábbiak szerint:

    sn –R StringLibrary.dll RealKeyPair.snk
    
  11. Írja alá újra az egyes műholdas szerelvényeket. Ehhez használja az Erős név eszközt (sn.exe) az egyes műholdszerelvények esetében az alábbiak szerint:

    sn –R StringLibrary.resources.dll RealKeyPair.snk
    
  12. Regisztrálja a StringLibrary.dll és annak minden társ-gyűjteményét a globális gyűjtemény-gyorsítótárban az alábbi paranccsal:

    gacutil -i filename
    

    ahol a fájlnév a regisztrálandó fájl neve.

  13. Ha Visual Studiót használ, hozzon létre egy új konzolalkalmazás-projektet , Exampleadjon hozzá egy hivatkozást a StringLibrary.dll és a következő forráskódhoz, és fordítsa le.

    using System;
    using System.Globalization;
    using System.Threading;
    
    public class Example
    {
       public static void Main()
       {
          string[] cultureNames = { "en-GB", "en-US", "fr-FR", "ru-RU" };
          Random rnd = new Random();
          string cultureName = cultureNames[rnd.Next(0, cultureNames.Length)];
          Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
          Console.WriteLine($"The current UI culture is {Thread.CurrentThread.CurrentUICulture.Name}");
          StringLibrary strLib = new StringLibrary();
          string greeting = strLib.GetGreeting();
          Console.WriteLine(greeting);
       }
    }
    
    Imports System.Globalization
    Imports System.Threading
    
    Module Example
        Public Sub Main()
            Dim cultureNames() As String = {"en-GB", "en-US", "fr-FR", "ru-RU"}
            Dim rnd As New Random()
            Dim cultureName As String = cultureNames(rnd.Next(0, cultureNames.Length))
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName)
            Console.WriteLine("The current UI culture is {0}",
                              Thread.CurrentThread.CurrentUICulture.Name)
            Dim strLib As New StringLibrary()
            Dim greeting As String = strLib.GetGreeting()
            Console.WriteLine(greeting)
        End Sub
    End Module
    

    A parancssorból való fordításhoz használja a következő parancsot a C# fordítóhoz:

    csc Example.cs -r:StringLibrary.dll
    

    A Visual Basic fordító parancssora a következő:

    vbc Example.vb -r:StringLibrary.dll
    
  14. Futtassa Example.exe.

Lásd még