GenerateResource-Aufgabe
Konvertiert zwischen .txt
- und .resx
-Dateien (im XML-basierten Ressourcenformat) und binären .resources
-Dateien der Common Language Runtime, die in eine ausführbare Laufzeitbinärdatei eingebettet oder in Satellitenassemblys kompiliert werden können. Diese Aufgabe wird in der Regel verwendet, um .txt
- oder .resx
-Dateien in .resources
-Dateien zu konvertieren. Die GenerateResource
-Aufgabe ist funktional identisch mit resgen.exe.
Achtung
Ressourcen in .resx
-Dateien können mithilfe von BinaryFormatter
serialisiert werden, was nicht sicher ist. Schließen Sie nur die .resx
-Dateien in Ihren Buildprozess ein, denen Sie vertrauen.
Parameter
In der folgenden Tabelle werden die Parameter der GenerateResource
-Aufgabe beschrieben.
Parameter | Beschreibung |
---|---|
AdditionalInputs |
Optionaler ITaskItem[] -ParameterEnthält zusätzliche Eingaben für die Abhängigkeitsüberprüfung, die von dieser Aufgabe ausgeführt wird. Beispielsweise sollten die Projekt- und Zieldateien in der Regel Eingaben sein, damit bei ihrer Aktualisierung alle Ressourcen neu generiert werden. |
EnvironmentVariables |
Optionaler String[] -Parameter.Gibt ein Array von Name-Wert-Paaren von Umgebungsvariablen an, das zusätzlich zum regulären Umgebungsblock (oder diesen selektiv überschreibend) an die erzeugte resgen.exe übergeben werden sollte. |
ExcludedInputPaths |
Optionaler ITaskItem[] -ParameterGibt ein Array von Elementen an, die Pfade angeben; nachverfolgte Eingaben aus diesen Pfaden werden während der Überprüfung auf aktuellen Stand ignoriert. |
ExecuteAsTool |
Optionaler Boolean -Parameter.Wenn true , werden tlbimp.exe und aximp.exe von dem entsprechenden Zielframework aus prozessextern ausgeführt, um die erforderlichen Wrapperassemblys zu generieren. Dieser Parameter ermöglicht die Festlegung von Zielversionen von ResolveComReferences . |
FilesWritten |
Optionaler ITaskItem[] -Ausgabeparameter.Enthält die Namen aller Dateien, die auf den Datenträger geschrieben wurden, einschließlich der Cachedatei, falls vorhanden. Dieser Parameter ist hilfreich für Implementierungen des Bereinigens. |
MinimalRebuildFromTracking |
Optionaler Boolean -Parameter.Ruft einen Schalter ab, der angibt, ob ein nachverfolgter inkrementeller Build verwendet wird, oder legt ihn fest. Wenn true , wird der inkrementelle Build aktiviert; andernfalls wird eine erneute Erstellung erzwungen. |
NeverLockTypeAssemblies |
Optionaler Boolean -Parameter.Dient zum Abrufen oder Festlegen eines booleschen Werts, der angibt, ob eine neue AppDomain- zum Auswerten der Ressourcendateien ( .resx ) oder zum Erstellen einer neuen AppDomain- nur dann erstellt werden soll, wenn die Ressourcendateien auf die Assembly eines Benutzers verweisen (false). |
OutputResources |
Optionaler ITaskItem[] -Ausgabeparameter.Gibt den Namen der generierten Dateien an (z. B. der .resources -Dateien). Wenn Sie keinen Namen angeben, wird der Name der entsprechenden Eingabedatei verwendet, und die erstellte .resources -Datei wird in dem Verzeichnis gespeichert, das die Eingabedatei enthält. |
PublicClass |
Optionaler Boolean -Parameter.Wenn true , wird eine stark typisierte Ressourcenklasse als öffentliche Klasse erstellt. |
References |
Optionaler String[] -Parameter.Verweise zum Laden von Typen in .resx -Dateien. Datenelemente der .resx -Datei können vom Typ „.NET“ sein. Wenn die RESX-Datei gelesen wird, muss dieser Typ aufgelöst werden. In der Regel wird dies mit Typladungsregeln erfolgreich aufgelöst. Wenn Sie in References Assemblys angeben, haben diese Vorrang.Dieser Parameter ist für stark typierte Ressourcen nicht erforderlich. |
SdkToolsPath |
Optionaler String -Parameter.Legt den Pfad zu den SDK-Tools fest, wie z.B. resgen.exe. |
Sources |
Erforderlicher ITaskItem[] -Parameter.Gibt die zu konvertierenden Elemente an. An diesen Parameter übergebene Elemente müssen eine der folgenden Erweiterungen aufweisen: - .txt : Gibt die Erweiterung für eine zu konvertierende Textdatei an. Textdateien dürfen nur Zeichenfolgenressourcen enthalten.- .resx : Gibt die Erweiterung für eine XML-basierte Ressourcendatei an, die konvertiert werden soll.- .restext : Gibt das gleiche Format wie .txt an. Diese andere Erweiterung ist nützlich, wenn Sie Quelldateien klar unterscheiden möchten, die Ressourcen aus anderen Quelldateien in Ihrem Buildprozess enthalten.- .resources : Gibt die Erweiterung für eine zu konvertierende Ressourcendatei an. |
StateFile |
Optionaler ITaskItem-Parameter. Gibt den Pfad zu einer optionalen Cachedatei an, die verwendet wird, um die Abhängigkeitsüberprüfung von Verknüpfungen in .resx Eingabedateien zu beschleunigen. |
StronglyTypedClassName |
Optionaler String -Parameter.Gibt den Klassennamen für die stark typisierte Ressourcenklasse an. Wenn dieser Parameter nicht angegeben ist, wird der Basisname der Ressourcendatei verwendet. |
StronglyTypedFilename |
Optionaler ITaskItem-Parameter. Gibt den Dateinamen der Quelldatei an. Wenn dieser Parameter nicht angegeben ist, wird der Name der Klasse als Basisdateiname verwendet, wobei die Erweiterung von der Sprache abhängig ist. Beispiel: MyClass.cs. |
StronglyTypedLanguage |
Optionaler String -Parameter.Gibt die Sprache an, die beim Generieren der Klassenquelle für die Ressource mit starker Typisierung verwendet werden soll. Dieser Parameter muss genau mit einer der Sprachen übereinstimmen, die von CodeDomProvider verwendet werden. Beispiel: VB oder C# .Mit der Übergabe eines Werts an diesen Parameter weisen Sie die Aufgabe an, stark typisierte Ressourcen zu generieren. |
StronglyTypedManifestPrefix |
Optionaler String -Parameter.Gibt den Ressourcennamespace oder das Manifestpräfix zur Verwendung in der generierten Klassenquelle für die Ressource mit starker Typisierung an. |
StronglyTypedNamespace |
Optionaler String -Parameter.Gibt den Namespace an, der für die generierte Klassenquelle für die Ressource mit starker Typisierung verwendet werden soll. Wenn dieser Parameter nicht angegeben ist, befinden sich alle stark typisierten Ressourcen im globalen Namespace. |
TLogReadFiles |
Optionaler schreibgeschützter ITaskItem[] -Parameter.Ruft ein Array von Elementen ab, die die Lesenachverfolgungs-Protokolle darstellen. |
TLogWriteFiles |
Optionaler schreibgeschützter ITaskItem[] -Parameter.Ruft ein Array von Elementen ab, die die Schreibnachverfolgungs-Protokolle darstellen. |
ToolArchitecture |
Optionaler System.String-Parameter. Wird verwendet, um zu bestimmen, ob Tracker.exe zum Erzeugen von ResGen.exe verwendet werden muss oder nicht. Sollte als Mitglied der ExecutableType-Enumeration analysierbar sein. Wenn String.Empty , wird eine Heuristik zum Ermitteln einer Standardarchitektur verwendet. Sollte als Mitglied der Microsoft.Build.Utilities.ExecutableType -Enumeration analysierbar sein. |
TrackerFrameworkPath |
Optionaler String -Parameter.Gibt den Pfad zu dem entsprechenden .NET Framework-Speicherort an, der FileTracker.dll enthält. Wenn festgelegt, übernimmt der Benutzer die Verantwortung dafür, sicherzustellen, dass die Bitanzahl von FileTracker.dll, die übergeben wird, der Bitanzahl von ResGen.exe entspricht, die verwendet werden soll. Wenn nicht festgelegt, wählt die Aufgabe den entsprechenden Speicherort basierend auf der aktuellen .NET Framework-Version. |
TrackerLogDirectory |
Optionaler String -Parameter.Gibt das temporäre Verzeichnis an, in dem die Nachverfolgungsprotokolle vom Ausführen dieser Aufgabe gespeichert werden. |
TrackerSdkPath |
Optionaler String -Parameter.Gibt den Pfad zu dem entsprechenden Windows SDK-Speicherort an, der Tracker.exe enthält. Wenn dieser festgelegt ist, übernimmt der Benutzer die Verantwortung dafür, sicherzustellen, dass die Bitanzahl von Tracker.exe, die übergeben wird, der Bitanzahl von ResGen.exe entspricht, die verwendet werden soll. Wenn nicht festgelegt, wählt die Aufgabe den entsprechenden Speicherort basierend auf der aktuellen Windows SDK-Version. |
TrackFileAccess |
Optionaler Boolean-Parameter. Wenn „true“, wird das Verzeichnis der Eingabedatei zum Auflösen relativer Dateipfade verwendet. |
UsePreserializedResources |
Optionaler Boolean -Parameter.Wenn true , gibt an, dass Ressourcen, die keine Zeichenfolgen sind, mithilfe von PreserializedResourceWriter anstelle von ResourceWriterserialisiert werden sollen, die auf .NET Core oder .NET 5 oder höher nicht unterstützt wird. |
UseSourcePath |
Optionaler Boolean -Parameter.Wenn true , wird angegeben, dass das Verzeichnis der Eingabedatei zum Auflösen relativer Dateipfade verwendet werden soll. |
Bemerkungen
Da .resx
Dateien möglicherweise Links zu anderen Ressourcendateien enthalten können, reicht es nicht aus, einfach .resx
zu vergleichen und .resources
Dateizeitstempel, um festzustellen, ob die Ausgaben auf dem neuesten Stand sind. Stattdessen folgt die GenerateResource
-Aufgabe den Links in den .resx
-Dateien und prüft ebenfalls die Zeitstempel der verknüpften Dateien. Dies bedeutet, dass Sie Inputs
- und Outputs
-Attribute nicht allgemein für das Ziel verwenden sollten, das die GenerateResource
-Aufgabe enthält, da dies dazu führen könnte, dass es übersprungen wird, wenn es tatsächlich ausgeführt werden sollte.
Zusätzlich zu den oben aufgeführten Parametern erbt diese Aufgabe Parameter von der TaskExtension-Klasse, die selbst von der Task-Klasse erbt. Eine Liste mit diesen zusätzlichen Parametern und ihren Beschreibungen finden Sie unter TaskExtension-Basisklasse.
Bei der Verwendung von MSBuild 4.0 für .NET 3.5-Projekte könnte bei der Ausführung des Builds auf x86-Ressourcen ein Fehler auftreten. Um dieses Problem zu umgehen, können Sie das Ziel als AnyCPU-Assembly erstellen.
Der Parameter UsePreserializedResources
erhält seinen Wert im normalen .NET-Buildprozess von der Eigenschaft $(GenerateResourceUsePreserializedResources)
. Diese Eigenschaft ist in .NET Core-Projekten und in Projekten, in denen mindestens .NET 5 verwendet wird, standardmäßig auf true
festgelegt. Sie können $(GenerateResourceUsePreserializedResources)
auf true
festlegen, damit das .NET SDK Projekte für .NET Framework 4.6.1 oder höhere Versionen erstellen kann, von denen zeichenfolgenfremde Ressourcen verwendet werden. Die Assembly System.Resources.Extensions
muss zur Laufzeit verfügbar sein. Sie ist ab .NET Core 3.0 bzw. ab .NET 5 verfügbar und kann ab .NET Framework 4.6.1 über „PackageReference“ verwendet werden.
Beispiel
Im folgenden Beispiel wird die GenerateResource
-Aufgabe verwendet, um .resources
-Dateien aus den Dateien zu generieren, die von der Resx
-Elementsammlung angegeben werden.
<GenerateResource
Sources="@(Resx)"
OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
Die GenerateResource
-Aufgabe verwendet die <LogicalName>
-Metadaten eines <EmbeddedResource>
-Elements, um die Ressource zu benennen, die in einer Assembly eingebettet ist.
Unter der Voraussetzung, dass die Assembly „myAssembly“ genannt wird, generiert der folgende Code eine eingebettete Ressource namens someQualifier.someResource.resources
:
<ItemGroup>
<EmbeddedResource Include="myResource.resx">
<LogicalName>someQualifier.someResource.resources</LogicalName>
<WithCulture>false</WithCulture>
</EmbeddedResource>
</ItemGroup>
Ohne die <LogicalName>
-Metadaten würde die Ressource den Namen myAssembly.myResource.resources
erhalten. Dieses Beispiel gilt nur für den Visual Basic- und Visual C#-Buildprozess.