GenerateResource-Aufgabe
Konvertiert zwischen .txt
- und .resx
dateien (XML-basiertes Ressourcenformat) und binären .resources
-Dateien, die in eine binäre ausführbare Laufzeit 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 ähnelt funktionell resgen.exe.
Vorsicht
Ressourcen in .resx
Dateien können mithilfe von BinaryFormatter
serialisiert werden, was nicht sicherenist. Schließen Sie nur die .resx
Dateien in Ihren Buildprozess ein, dem Sie vertrauen.
Parameter
In der folgenden Tabelle werden die Parameter des GenerateResource
Vorgangs beschrieben.
Parameter | Beschreibung |
---|---|
AdditionalInputs |
Optionaler ITaskItem[] -Parameter.Enthält zusätzliche Eingaben für die Von diesem Vorgang durchgeführte Abhängigkeitsüberprüfung. Das Projekt und die Zieldateien sollten in der Regel Eingaben sein, sodass alle Ressourcen neu generiert werden, wenn sie aktualisiert werden. |
EnvironmentVariables |
Optionaler String[] -Parameter.Gibt ein Array von Namens-Wert-Paaren von Umgebungsvariablen an, die zusätzlich zum regulären Umgebungsblock an die spawned resgen.exeübergeben werden sollen (oder selektiv außer Kraft setzen). |
ExcludedInputPaths |
Optionaler ITaskItem[] -Parameter.Gibt ein Array von Elementen an, die Pfade angeben, aus denen nachverfolgte Eingaben während der Überprüfung auf dem neuesten Stand ignoriert werden. |
ExecuteAsTool |
Optionaler Boolean -Parameter.Wenn true , wird tlbimp.exe und aximp.exe aus dem entsprechenden Zielframework ausgeführt, um die erforderlichen Wrapperassemblys zu generieren. Dieser Parameter ermöglicht die Mehrfachadressierung 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 nützlich für Implementierungen von Clean. |
MinimalRebuildFromTracking |
Optionaler Boolean -Parameter.Dient zum Abrufen oder Festlegen eines Schalters, der angibt, ob nachverfolgte inkrementelle Build verwendet wird. Wenn true , ist der inkrementelle Build aktiviert; andernfalls wird eine Neuerstellung 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. .resources Dateien. Wenn Sie keinen Namen angeben, wird der Name der übereinstimmenden Eingabedatei verwendet, und die erstellte .resources Datei wird in das Verzeichnis eingefügt, das die Eingabedatei enthält. |
PublicClass |
Optionaler Boolean -Parameter.Wenn true , wird eine stark typierte Ressourcenklasse als öffentliche Klasse erstellt. |
References |
Optionaler String[] -Parameter.Verweise auf das Laden von Typen in .resx Dateien aus.
.resx Dateidatenelemente verfügen möglicherweise über einen .NET-Typ. Wenn die RESX- Datei gelesen wird, muss dieser Typ aufgelöst werden. In der Regel wird sie mithilfe von Standardtypladeregeln erfolgreich aufgelöst. Wenn Sie Assemblys in References bereitstellen, haben sie Vorrang.Dieser Parameter ist für stark typierte Ressourcen nicht erforderlich. |
SdkToolsPath |
Optionaler String -Parameter.Gibt den Pfad zu den SDK-Tools an, z. B. resgen.exe. |
Sources |
Erforderlicher ITaskItem[] -Parameter.Gibt die zu konvertierenden Elemente an. An diesen Parameter übergebene Elemente müssen über eine der folgenden Dateierweiterungen verfügen: - .txt : Gibt die Erweiterung für eine zu konvertierende Textdatei an. Textdateien können 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 eindeutig 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 für die 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 stark typierte Ressource verwendet werden soll. Dieser Parameter muss genau einer der sprachen entsprechen, die vom CodeDomProvider verwendet werden. Beispiel: VB oder C# .Indem Sie einen Wert an diesen Parameter übergeben, weisen Sie den Vorgang an, stark typierte Ressourcen zu generieren. |
StronglyTypedManifestPrefix |
Optionaler String -Parameter.Gibt das Ressourcennamespace- oder Manifestpräfix an, das in der generierten Klassenquelle für die stark typisierte Ressource verwendet werden soll. |
StronglyTypedNamespace |
Optionaler String -Parameter.Gibt den Namespace an, der für die generierte Klassenquelle für die stark typierte Ressource verwendet werden soll. Wenn dieser Parameter nicht angegeben ist, befinden sich alle stark typisierten Ressourcen im globalen Namespace. |
TLogReadFiles |
Optionaler ITaskItem[] schreibgeschützter Parameter.Ruft ein Array von Elementen ab, die die Leseverfolgungsprotokolle darstellen. |
TLogWriteFiles |
Optionaler ITaskItem[] schreibgeschützter Parameter.Ruft ein Array von Elementen ab, die die Schreibverfolgungsprotokolle darstellen. |
ToolArchitecture |
Optionaler System.String-Parameter. Wird verwendet, um zu bestimmen, ob Tracker.exe verwendet werden muss, um ResGen.exezu spawnen. Sollte für ein Element der ExecutableType-Aufzählung analysiert werden. Wenn String.Empty , wird eine Heuristik verwendet, um eine Standardarchitektur zu bestimmen. Sollte für ein Element der Microsoft.Build.Utilities.ExecutableType -Aufzählung analysiert werden. |
TrackerFrameworkPath |
Optionaler String -Parameter.Gibt den Pfad zum entsprechenden .NET Framework-Speicherort an, der FileTracker.dllenthält. Wenn festgelegt, übernimmt der Benutzer die Verantwortung, sicherzustellen, dass die Bitanzahl der FileTracker.dll, die sie bestehen, der Bitanzahl der ResGen.exe entspricht, die sie verwenden möchten. Wenn sie nicht festgelegt ist, entscheidet die Aufgabe basierend auf der aktuellen .NET Framework-Version den geeigneten Speicherort. |
TrackerLogDirectory |
Optionaler String -Parameter.Gibt das Zwischenverzeichnis an, in das die Tracking-Protokolle aus der Ausführung dieser Aufgabe platziert werden. |
TrackerSdkPath |
Optionaler String -Parameter.Gibt den Pfad zum entsprechenden Windows SDK-Speicherort an, der Tracker.exeenthält. Wenn festgelegt, übernimmt der Benutzer die Verantwortung, sicherzustellen, dass die Bitanzahl der Tracker.exe, die sie bestehen, der Bitanzahl der ResGen.exe entspricht, die sie verwenden möchten. Wenn sie nicht festgelegt ist, entscheidet die Aufgabe basierend auf dem aktuellen Windows SDK den geeigneten Speicherort. |
TrackFileAccess |
Optionaler Boolean-Parameter. Bei "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 , gibt an, 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 überprüft auch die Zeitstempel der verknüpften Dateien. Dies bedeutet, dass Sie nicht im Allgemeinen Inputs
und Outputs
Attribute für das Ziel verwenden sollten, das die GenerateResource
Aufgabe enthält, da dies dazu führen kann, dass sie übersprungen wird, wenn sie tatsächlich ausgeführt werden soll.
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 dieser zusätzlichen Parameter und deren Beschreibungen finden Sie unter TaskExtension-Basisklasse.
Bei Verwendung von MSBuild 4.0 für .NET 3.5-Projekte kann der Build für x86-Ressourcen fehlschlagen. Um dieses Problem zu umgehen, können Sie das Ziel als AnyCPU-Assembly erstellen.
Der Parameter UsePreserializedResources
ruft seinen Wert aus der Eigenschaft $(GenerateResourceUsePreserializedResources)
im normalen .NET-Buildprozess ab. Diese Eigenschaft ist standardmäßig auf true
in .NET Core-Projekten und -Projekten festgelegt, die .NET 5 oder höher verwenden. Sie können $(GenerateResourceUsePreserializedResources)
auf true
festlegen, damit das .NET SDK Projekte für .NET Framework 4.6.1 oder höher erstellt, die Ressourcen ohne Zeichenfolgen verwenden. Die Assembly-System.Resources.Extensions
muss zur Laufzeit verfügbar sein. Sie ist in .NET Core 3.0 und höher und .NET 5 und höher verfügbar und kann in .NET Framework 4.6.1 oder höher über PackageReference verwendet werden.|
Beispiel
Im folgenden Beispiel wird die GenerateResource
Aufgabe verwendet, um .resources
Dateien aus den durch die Resx
Elementauflistung angegebenen Dateien zu generieren.
<GenerateResource
Sources="@(Resx)"
OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
Der GenerateResource
Vorgang verwendet die <LogicalName>
Metadaten eines <EmbeddedResource>
Elements, um die Ressource zu benennen, die in eine Assembly eingebettet ist.
Wenn die Assembly "myAssembly" heißt, generiert der folgende Code eine eingebettete Ressource mit dem Namen 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 myAssembly.myResource.resources
benannt. Dieses Beispiel gilt nur für den Visual Basic- und Visual C#-Buildprozess.