App-Ressourcen für Bibliotheken, die für mehrere Zielplattformen konfiguriert sindApp Resources for Libraries That Target Multiple Platforms

Sie können .NET Framework Portable Class Library Projekttyp, um sicherzustellen, dass Ressourcen in den Klassenbibliotheken, die von mehreren Plattformen zugegriffen werden kann.You can use the .NET Framework Portable Class Library project type to ensure that resources in your class libraries can be accessed from multiple platforms. Dieser Projekttyp ist in Visual Studio 2012 verfügbar und ist die portable Teilmenge der .NET Framework-Klassenbibliothek vorgesehen.This project type is available in Visual Studio 2012 and targets the portable subset of the .NET Framework class library. Eine Portable Klassenbibliothek wird sichergestellt, dass die Bibliothek von desktop-apps, Silverlight-apps, Windows Phone-apps zugegriffen werden kann und Windows 8.x StoreWindows 8.x Store apps.Using a Portable Class Library ensures that your library can be accessed from desktop apps, Silverlight apps, Windows Phone apps, and Windows 8.x StoreWindows 8.x Store apps.

Wichtig

Da Projekte für Portable Klassenbibliotheken nur eine ganz bestimmte Teilmenge von .NET-Implementierungen Ziel, wir Raten dringend ab, deren Verwendung in der Entwicklung neuer Anwendungen.Because Portable Class Library projects target only a very specific subset of .NET implementations, we strongly discourage their use in new application development. Der empfohlene Ersatz ist eine .NET Standard-Bibliothek, die Implementierungen für alle .NET ausgerichtet ist, die eine bestimmte Version von .NET Standard unterstützen.The recommended replacement is a .NET Standard library, which targets all .NET implementations that support a specific version of the .NET Standard. Weitere Informationen finden Sie unter .NET Standard.For more information, see .NET Standard.

Die Portable Class Library-Projekt enthält nur eine beschränkte Teilmenge der Typen in der System.Resources Namespace für Ihre Anwendung, sondern lässt Sie mit der ResourceManager Klasse zum Abrufen von Ressourcen.The Portable Class Library project makes only a very limited subset of the types in the System.Resources namespace available to your application, but it does allow you to use the ResourceManager class to retrieve resources. Wenn Sie jedoch eine Anwendung unter Verwendung von Visual Studio erstellen, sollten Sie den von Visual Studio erstellten stark typisierten Wrapper verwenden und nicht die ResourceManager-Klasse direkt verwenden.However, if you are creating an app by using Visual Studio, you should use the strongly typed wrapper created by Visual Studio instead of using the ResourceManager class directly.

Um einen stark typisierten Wrapper in Visual Studio zu erstellen, legen Sie die Hauptressourcendatei Zugriffsmodifizierer in der Visual Studio-Ressourcen-Designer auf öffentliche.To create a strongly typed wrapper in Visual Studio, set the main resource file's Access Modifier in the Visual Studio Resource Designer to Public. Dadurch wird eine [resourceFileName].designer.cs-Datei oder [resourceFileName].designer.vb-Datei erstellt, die den stark typisierten ResourceManager-Wrapper enthält.This creates a [resourceFileName].designer.cs or [resourceFileName].designer.vb file that contains the strongly typed ResourceManager wrapper. Weitere Informationen zur Verwendung eines stark typisierten ressourcenwrappers finden Sie im Abschnitt "Generieren einer stark typisierten Ressourcenklasse" in der Resgen.exe (Resource File Generator) Thema.For more information about using a strongly typed resource wrapper, see the "Generating a Strongly Typed Resource Class" section in the Resgen.exe (Resource File Generator) topic.

Ressourcen-Manager in der portablen KlassenbibliothekResource Manager in the Portable Class Library

In einem Portable Class Library-Projekt erfolgt die gesamte Zugriff auf Ressourcen durch die ResourceManager Klasse.In a Portable Class Library project, all access to resources is handled by the ResourceManager class. Da Typen in der System.Resources -Namespace, z. B. ResourceReader und ResourceSet, werden aus einem Projekt der portablen Klassenbibliothek nicht zugänglich, sie können nicht verwendet werden, um den Zugriff auf Ressourcen.Because types in the System.Resources namespace, such as ResourceReader and ResourceSet, are not accessible from a Portable Class Library project, they cannot be used to access resources.

Das Portable Class Library-Projekt enthält die vier ResourceManager Member, die in der folgenden Tabelle aufgeführt.The Portable Class Library project includes the four ResourceManager members listed in the following table. Diese Konstruktoren und Methoden ermöglichen es Ihnen, ein ResourceManager-Objekt zu instanziieren und Zeichenfolgenressourcen abzurufen.These constructors and methods enable you to instantiate a ResourceManager object and retrieve string resources.

ResourceManager -MemberResourceManager member BeschreibungDescription
ResourceManager(String, Assembly) Erstellt eine ResourceManager-Instanz für den Zugriff auf die benannte Ressourcendatei in der angegebenen Assembly.Creates a ResourceManager instance to access the named resource file found in the specified assembly.
ResourceManager(Type) Erstellt eine ResourceManager-Instanz, die dem angegebenen Typ entspricht.Creates a ResourceManager instance that corresponds to the specified type.
GetString(String) Ruft eine benannte Ressource für die aktuelle Kultur ab.Retrieves a named resource for the current culture.
GetString(String, CultureInfo) Ruft eine benannte Ressource ab, die zu der angegebenen Kultur gehört.Retrieves a named resource belonging to the specified culture.

Der Ausschluss anderer ResourceManager Mitglieder, die Möglichkeit, Portable Class Library, die serialisiert Objekte und nicht-Zeichenfolgen-Images können nicht aus einer Ressourcendatei abgerufen werden.The exclusion of other ResourceManager members from the Portable Class Library means that serialized objects, non-string data, and images cannot be retrieved from a resource file. Um Ressourcen aus einer portablen Klassenbibliothek verwenden möchten, sollten Sie alle Objektdaten im Zeichenfolgenformat speichern.To use resources from a Portable Class Library, you should store all object data in string form. Beispielsweise können Sie numerische Werte in einer Ressourcendatei speichern, indem Sie sie in Zeichenfolgen konvertieren. Anschließend können Sie diese abrufen und mit der Parse-Methode oder der TryParse-Methode des numerischen Datentyps zurück in Zahlen konvertieren.For example, you can store numeric values in a resource file by converting them to strings, and you can retrieve them and then convert them back to numbers by using the numeric data type's Parse or TryParse method. Sie können Bilder oder andere Binärdaten durch Aufruf der Convert.ToBase64String-Methode in eine Zeichenfolgendarstellung konvertieren und sie durch Aufruf der Convert.FromBase64String-Methode als Bytearray wiederherstellen.You can convert images or other binary data to a string representation by calling the Convert.ToBase64String method, and restore them to a byte array by calling the Convert.FromBase64String method.

Die Portable Klassenbibliothek und dem Windows Store-AppsThe Portable Class Library and Windows Store Apps

Projekte für portable Klassenbibliotheken Speichern von Ressourcen in RESX-Dateien, die dann in die RESOURCES-Dateien kompiliert und in der Hauptassembly oder in Satellitenassemblys werden, zum Zeitpunkt der Kompilierung eingebettet.Portable Class Library projects store resources in .resx files, which are then compiled into .resources files and embedded in the main assembly or in satellite assemblies at compile time. Für Apps im Windows 8.x StoreWindows 8.x Store hingegen müssen Ressourcen in RESW-Dateien gespeichert werden, die dann als einzelne PRI (Package Resource Index)-Datei kompiliert werden.Windows 8.x StoreWindows 8.x Store apps, on the other hand, require resources to be stored in .resw files, which are then compiled into a single package resource index (PRI) file. Trotz der nicht kompatiblen Dateiformate, der portablen Klassenbibliothek funktioniert jedoch einem Windows 8.x StoreWindows 8.x Store app.However, despite the incompatible file formats, your Portable Class Library will work in a Windows 8.x StoreWindows 8.x Store app.

Um die Klassenbibliothek in einer App im Windows 8.x StoreWindows 8.x Store zu verwenden, fügen Sie im Projekt für die App im Windows Store einen Verweis auf die Klassenbibliothek hinzu.To consume your class library from a Windows 8.x StoreWindows 8.x Store app, add a reference to it in your Windows Store app project. Visual Studio wird transparent die Ressourcen aus der Assembly in eine resw-Datei zu extrahieren und verwenden sie zum Generieren einer PRI-Datei, von der die Windows-Runtime Ressourcen extrahieren kann.Visual Studio will transparently extract the resources from your assembly into a .resw file and use it to generate a PRI file from which the Windows Runtime can extract resources. Bei der Ausführung der Windows-Runtime führt den Code in der portablen Klassenbibliothek, aber der portablen Klassenbibliothek Ressourcen aus der PRI-Datei abgerufen.At run time, the Windows Runtime executes the code in your Portable Class Library, but it retrieves your Portable Class Library's resources from the PRI file.

Wenn Ihr Projekt der portablen Klassenbibliothek lokalisierte Ressourcen enthält, verwenden Sie das Hub-Spoke-Modell wie für eine Bibliothek in einer desktop-app bereitstellen.If your Portable Class Library project includes localized resources, you use the hub-and-spoke model to deploy them just as you would for a library in a desktop app. Um in der App im Windows 8.x StoreWindows 8.x Store die Hauptressourcendatei und ggf. lokalisierte Ressourcendateien zu verwenden, fügen Sie einen Verweis auf die Hauptassembly hinzu.To consume your main resource file and any localized resource files in your Windows 8.x StoreWindows 8.x Store app, you add a reference to the main assembly. Zur Kompilierzeit extrahiert Visual Studio die Ressource aus der Hauptressourcendatei und lokalisiert die Ressourcendateien in separate RESW-Dateien.At compile time, Visual Studio extracts the resources from your main resource file and any localized resource files into separate .resw files. Dann wird die resw-Dateien kompiliert, in einer einzelnen PRI-Datei, die die Windows-Runtime zur Laufzeit zugreift.It then compiles the .resw files into a single PRI file that the Windows Runtime accesses at run time.

Beispiel: Nicht lokalisierte portablen KlassenbibliothekExample: Non-Localized Portable Class Library

Im folgende Beispiel für einfache, nicht lokalisierten Portable Class Library verwendet Ressourcen, um die Namen der Spalten zu speichern und um zu bestimmen, die Anzahl der Zeichen, die für Tabellendaten reserviert.The following simple, non-localized Portable Class Library example uses resources to store the names of columns and to determine the number of characters to reserve for tabular data. Im Beispiel werden die in der folgenden Tabelle aufgeführten Zeichenfolgenressourcen in der Datei LibResources.resx gespeichert.The example uses a file named LibResources.resx to store the string resources listed in the following table.

RessourcennameResource name RessourcenwertResource value
BornBorn BirthdateBirthdate
BornLengthBornLength 1212
HiredHired Hire DateHire Date
HiredLengthHiredLength 1212
IDID IDID
ID.LengthID.Length 1212
NameName NameName
NameLengthNameLength 2525
TitelTitle MitarbeiterdatenbankEmployee Database

Der folgende Code definiert eine UILibrary -Klasse, den Resource Manager-Wrapper, der mit dem Namen verwendet resources von Visual Studio generiert bei der Zugriffsmodifizierer für die Datei, um geändert wird öffentliche .The following code defines a UILibrary class that uses the Resource Manager wrapper named resources generated by Visual Studio when the Access Modifier for the file is changed to Public. Die UILibrary-Klasse analysiert die Zeichenfolgendaten nach Bedarf.The UILibrary class parses the string data as necessary. sein.. Beachten Sie, dass sich die Klasse im MyCompany.Employees-Namespace befindet.Note that the class is in the MyCompany.Employees namespace.

using System;
using System.Resources;
using MyCompany.Employees;

[assembly: NeutralResourcesLanguage("en-US")]

namespace MyCompany.Employees
{
   public class UILibrary
   {
      private const int nFields = 4;

      public static string GetTitle()
      {
         string retval = LibResources.Born; 
         if (String.IsNullOrEmpty(retval))
            retval = "";

         return retval;
      }

      public static string[] GetFieldNames()
      {
         string[] fieldnames = new string[nFields];
         fieldnames[0] = LibResources.Name;
         fieldnames[1] = LibResources.ID;
         fieldnames[2] = LibResources.Born;
         fieldnames[3] = LibResources.Hired;
         return fieldnames;
      }

      public static int[] GetFieldLengths()
      {
         int[] fieldLengths = new int[nFields];
         fieldLengths[0] = Int32.Parse(LibResources.NameLength);
         fieldLengths[1] = Int32.Parse(LibResources.IDLength);
         fieldLengths[2] = Int32.Parse(LibResources.BornLength);
         fieldLengths[3] = Int32.Parse(LibResources.HiredLength);
         return fieldLengths;
      }
   }
}
Imports System.Resources

<Assembly: NeutralResourcesLanguage("en-US")> 

Public Class UILibrary
   Private Const nFields As Integer = 4

   Public Shared Function GetTitle() As String
      Dim retval As String = My.Resources.LibResources.Title
      If String.IsNullOrEmpty(retval) Then retval = "<No value>"

      Return retval
   End Function

   Public Shared Function GetFieldNames() As String()
      Dim fieldnames(nFields - 1) As String
      fieldnames(0) = My.Resources.LibResources.Name
      fieldnames(1) = My.Resources.LibResources.ID
      fieldnames(2) = My.Resources.LibResources.Born
      fieldnames(3) = My.Resources.LibResources.Hired
      Return fieldnames
   End Function

   Public Shared Function GetFieldLengths() As Integer()
      Dim fieldLengths(nFields - 1) As Integer
      fieldLengths(0) = Int32.Parse(My.Resources.LibResources.NameLength)
      fieldLengths(1) = Int32.Parse(My.Resources.LibResources.IDLength)
      fieldLengths(2) = Int32.Parse(My.Resources.LibResources.BornLength)
      fieldLengths(3) = Int32.Parse(My.Resources.LibResources.HiredLength)
      Return fieldLengths
   End Function
End Class

Im folgenden Code wird veranschaulicht, wie aus einer App im Konsolenmodus auf die UILibrary-Klasse und ihre Ressourcen zugegriffen werden kann.The following code illustrates how the UILibrary class and its resources can be accessed from a console-mode app. Es muss es sich um einen Verweis auf UILibrary.dll Console app-Projekt hinzugefügt werden.It requires a reference to UILibrary.dll to be added to the console app project.

using System;
using System.Collections.Generic;
using MyCompany.Employees;
 
class Program
{
   static void Main()
   {
     // Get the data from some data source.
      var employees = InitializeData();

      // Display application title.
      string title = UILibrary.GetTitle();
      int start = (Console.WindowWidth + title.Length) / 2;
      string titlefmt = String.Format("{{0,{0}{1}", start, "}");
      Console.WriteLine(titlefmt, title);
      Console.WriteLine();

      // Retrieve resources.
      string[] fields = UILibrary.GetFieldNames();
      int[] lengths = UILibrary.GetFieldLengths();
      string fmtString = String.Empty;
      // Create format string for field headers and data.
      for (int ctr = 0; ctr < fields.Length; ctr++)
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

      // Display the headers.
      Console.WriteLine(fmtString, fields);
      Console.WriteLine();
      // Display the data.
      foreach (var e in employees)
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4);

      Console.ReadLine();
   }

   private static List<Tuple<String, String, DateTime, DateTime>> InitializeData() 
   {
      List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
      var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
      employees.Add(t1);
      t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
      employees.Add(t1);
      return employees;
   }
}
Imports MyCompany.Employees
Imports System.Collections.Generic

Module Module1

   Sub Main()
      ' Get the data from some data source.
      Dim employees = InitializeData()

      ' Display application title.
      Dim title As String = UILibrary.GetTitle()
      Dim start As Integer = (Console.WindowWidth + title.Length) \ 2
      Dim titlefmt As String = String.Format("{{0,{0}{1}", start, "}")
      Console.WriteLine(titlefmt, title)
      Console.WriteLine()

      ' Retrieve resources.
      Dim fields() As String = UILibrary.GetFieldNames()
      Dim lengths() As Integer = UILibrary.GetFieldLengths()
      Dim fmtString As String = String.Empty
      ' Create format string for field headers and data.
      For ctr = 0 To fields.Length - 1
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), IIf(ctr >= 2, ":d", ""), "}")
      Next
      ' Display the headers.
      Console.WriteLine(fmtString, fields)
      Console.WriteLine()
      ' Display the data.
      For Each e In employees
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4)
      Next
      Console.ReadLine()
   End Sub

   Private Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
      Dim employees As New List(Of Tuple(Of String, String, Date, Date))
      Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
      employees.Add(t1)
      t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
      employees.Add(t1)
      Return employees
   End Function
End Module

Im folgenden Code wird veranschaulicht, wie aus einer App im UILibrary auf die Windows 8.x StoreWindows 8.x Store-Klasse und ihre Ressourcen zugegriffen werden kann.The following code illustrates how the UILibrary class and its resources can be accessed from a Windows 8.x StoreWindows 8.x Store app. Muss ein Verweis auf UILibrary.dll auf dem Windows Store-app-Projekt hinzugefügt werden.It requires a reference to UILibrary.dll to be added to the Windows Store app project.

using System;
using System.Collections.Generic;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using MyCompany.Employees;

namespace ConsumerCS
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();

         }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
           Example.DisplayData(outputBlock);
       }
    }
}

public class Example
{
    static public void DisplayData(Windows.UI.Xaml.Controls.TextBlock outputBlock)
    {
        // Get the data from some data source.
        var employees = InitializeData();
        outputBlock.FontFamily = new FontFamily("Courier New");      
        // Display application title.
        string title = UILibrary.GetTitle();
        outputBlock.Text += title + Environment.NewLine + Environment.NewLine;

        // Retrieve resources.
        string[] fields = UILibrary.GetFieldNames();
        int[] lengths = UILibrary.GetFieldLengths();
        string fmtString = String.Empty;
        // Create format string for field headers and data.
        for (int ctr = 0; ctr < fields.Length; ctr++)
            fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

        // Display the headers.
        outputBlock.Text += String.Format(fmtString, fields) + Environment.NewLine + Environment.NewLine;
        // Display the data.
        foreach (var e in employees)
            outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + Environment.NewLine;
    }

    private static List<Tuple<String, String, DateTime, DateTime>> InitializeData()
    {
        List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
        var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
        employees.Add(t1);
        t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
        employees.Add(t1);
        return employees;
    }
}

Beispiel: Lokalisierte portablen KlassenbibliothekExample: Localized Portable Class Library

Im folgende lokalisierte Portable Class Library-Beispiel enthält Ressourcen für die (Frankreich) Kulturen Französisch und Englisch (USA).The following localized Portable Class Library example includes resources for the French (France) and English (United States) cultures. Kultur Englisch (Vereinigte Staaten) ist die Standardkultur der app. die Ressourcen werden angezeigt, in der Tabelle in der vorherigen Abschnitt.The English (United States) culture is the app's default culture; its resources are shown in the table in the previous section. Die Ressourcendatei für die Kultur Französisch (Frankreich) hat den Namen LibResources.fr-FR.resx, und sie besteht aus den Zeichenfolgenressourcen in der folgenden Tabelle.The resources file for the French (France) culture is named LibResources.fr-FR.resx and consists of the string resources listed in the following table. Der Quellcode für die UILibrary-Klasse ist mit dem Quellcode im vorherigen Abschnitt identisch.The source code for the UILibrary class is the same as that shown in the previous section.

RessourcennameResource name RessourcenwertResource value
BornBorn Date de naissanceDate de naissance
BornLengthBornLength 2020
HiredHired Date embauchéDate embauché
HiredLengthHiredLength 1616
IDID IDID
NameName NomNom
TitelTitle Base de données des employésBase de données des employés

Im folgenden Code wird veranschaulicht, wie aus einer App im Konsolenmodus auf die UILibrary-Klasse und ihre Ressourcen zugegriffen werden kann.The following code illustrates how the UILibrary class and its resources can be accessed from a console-mode app. Es muss es sich um einen Verweis auf UILibrary.dll Console app-Projekt hinzugefügt werden.It requires a reference to UILibrary.dll to be added to the console app project.

using System;
using System.Collections.Generic;
using System.Globalization;

using MyCompany.Employees;
 
class Program
{
   static void Main(string[] args)
   {
     
      // Get the data from some data source.
      var employees = InitializeData();

      // Display application title.
      string title = UILibrary.GetTitle();
      int start = (Console.WindowWidth + title.Length) / 2;
      string titlefmt = String.Format("{{0,{0}{1}", start, "}");
      Console.WriteLine(titlefmt, title);
      Console.WriteLine();

      // Retrieve resources.
      string[] fields = UILibrary.GetFieldNames();
      int[] lengths = UILibrary.GetFieldLengths();
      string fmtString = String.Empty;
      // Create format string for field headers and data.
      for (int ctr = 0; ctr < fields.Length; ctr++)
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

      // Display the headers.
      Console.WriteLine(fmtString, fields);
      Console.WriteLine();
      // Display the data.
      foreach (var e in employees)
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4);

      Console.ReadLine();
   }

   private static List<Tuple<String, String, DateTime, DateTime>> InitializeData() 
   {
      List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
      var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
      employees.Add(t1);
      t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
      employees.Add(t1);
      return employees;
   }

}
Imports MyCompany.Employees
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Module Module1
   Sub Main()
      Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("fr-FR")
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture
      Console.WriteLine("Current culture is {0}", CultureInfo.CurrentCulture.Name)

      ' Get the data from some data source.
      Dim employees = InitializeData()

      ' Display application title.
      Dim title As String = UILibrary.GetTitle()
      Dim start As Integer = (Console.WindowWidth + title.Length) \ 2
      Dim titlefmt As String = String.Format("{{0,{0}{1}", start, "}")
      Console.WriteLine(titlefmt, title)
      Console.WriteLine()

      ' Retrieve resources.
      Dim fields() As String = UILibrary.GetFieldNames()
      Dim lengths() As Integer = UILibrary.GetFieldLengths()
      Dim fmtString As String = String.Empty
      ' Create format string for field headers and data.
      For ctr = 0 To fields.Length - 1
         fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), IIf(ctr >= 2, ":d", ""), "}")
      Next
      ' Display the headers.
      Console.WriteLine(fmtString, fields)
      Console.WriteLine()
      ' Display the data.
      For Each e In employees
         Console.WriteLine(fmtString, e.Item1, e.Item2, e.Item3, e.Item4)
      Next
      Console.ReadLine()
   End Sub

   Private Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
      Dim employees As New List(Of Tuple(Of String, String, Date, Date))
      Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
      employees.Add(t1)
      t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
      employees.Add(t1)
      Return employees
   End Function
End Module

Im folgenden Code wird veranschaulicht, wie aus einer App im UILibrary auf die Windows 8.x StoreWindows 8.x Store-Klasse und ihre Ressourcen zugegriffen werden kann.The following code illustrates how the UILibrary class and its resources can be accessed from a Windows 8.x StoreWindows 8.x Store app. Muss ein Verweis auf UILibrary.dll auf dem Windows Store-app-Projekt hinzugefügt werden.It requires a reference to UILibrary.dll to be added to the Windows Store app project. Mit der statischen ApplicationLanguages.PrimaryLanguageOverride-Eigenschaft wird die bevorzugte Sprache der App auf Französisch festgelegt.It uses the static ApplicationLanguages.PrimaryLanguageOverride property to set the app's preferred language to French.

using System;
using System.Collections.Generic;
using Windows.Globalization;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using MyCompany.Employees;

namespace LocConsumerCS
{
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();

        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            Example.Demo(outputBlock);
        }
    }

    public class Example
    {
        public static void Demo(TextBlock outputBlock)
        {
            // Set the application preferences.
            ApplicationLanguages.PrimaryLanguageOverride = "fr-FR";

            // Get the data from some data source. 
            var employees = InitializeData();
            outputBlock.FontFamily = new FontFamily("Courier New");
            // Display application title.
            string title = UILibrary.GetTitle();
            outputBlock.Text += title + Environment.NewLine + Environment.NewLine; 

            // Retrieve resources.
            string[] fields = UILibrary.GetFieldNames();
            int[] lengths = UILibrary.GetFieldLengths();
            string fmtString = String.Empty;
            // Create format string for field headers and data.
            for (int ctr = 0; ctr < fields.Length; ctr++)
                fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths[ctr], ctr >= 2 ? ":d" : "", "}");

            // Display the headers.
            outputBlock.Text += String.Format(fmtString, fields) + Environment.NewLine + Environment.NewLine;

            // Display the data.
            foreach (var e in employees)
                outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + Environment.NewLine;
        }

        private static List<Tuple<String, String, DateTime, DateTime>> InitializeData()
        {
            List<Tuple<String, String, DateTime, DateTime>> employees = new List<Tuple<String, String, DateTime, DateTime>>();
            var t1 = Tuple.Create("John", "16302", new DateTime(1954, 8, 18), new DateTime(2006, 9, 8));
            employees.Add(t1);
            t1 = Tuple.Create("Alice", "19745", new DateTime(1995, 5, 10), new DateTime(2012, 10, 17));
            employees.Add(t1);
            return employees;
        }
    }
}
Imports Windows.Globalization
Imports MyCompany.Employees

Public NotInheritable Class BlankPage
    Inherits Page

    Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
        Example.Demo(outputBlock)
    End Sub
End Class

Public Class Example
    Public Shared Sub Demo(outputBlock As Windows.UI.Xaml.Controls.TextBlock)
        ' Set the application preferences.
        ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"

        ' Get the data from some data source. 
        Dim employees = InitializeData()
        outputBlock.FontFamily = New FontFamily("Courier New")
        ' Display application title.
        Dim title As String = UILibrary.GetTitle()
        outputBlock.Text += title + vbCrLf + vbCrLf

        ' Retrieve resources.
        Dim fields() As String = UILibrary.GetFieldNames()
        Dim lengths() As Integer = UILibrary.GetFieldLengths()
        Dim fmtString As String = String.Empty
        ' Create format string for field headers and data.
        For ctr = 0 To fields.Length - 1
            fmtString += String.Format("{{{0},-{1}{2}{3}   ", ctr, lengths(ctr), If(ctr >= 2, ":d", ""), "}")
        Next
        ' Display the headers.
        outputBlock.Text += String.Format(fmtString, fields) + vbCrLf + vbCrLf

        ' Display the data.
        For Each e In employees
            outputBlock.Text += String.Format(fmtString, e.Item1, e.Item2, e.Item3, e.Item4) + vbCrLf
        Next
    End Sub

    Private Shared Function InitializeData() As List(Of Tuple(Of String, String, Date, Date))
        Dim employees As New List(Of Tuple(Of String, String, Date, Date))
        Dim t1 = Tuple.Create("John", "16302", #8/18/1954#, #9/8/2006#)
        employees.Add(t1)
        t1 = Tuple.Create("Alice", "19745", #5/10/1995#, #10/17/2012#)
        employees.Add(t1)
        Return employees
    End Function
End Class

Siehe auchSee also