GenerateResource-taak
Converteert tussen bestanden met .txt
en .resx
(XML-gebaseerde resourceindeling) en binaire .resources
-bestanden van common language runtime die kunnen worden ingesloten in een uitvoerbaar runtimebestand of kunnen worden gecompileerd in satellietassembly's. Deze taak wordt meestal gebruikt om .txt
of .resx
bestanden te converteren naar .resources
bestanden. De GenerateResource
taak is functioneel vergelijkbaar met resgen.exe.
Voorzichtigheid
Resources in .resx
bestanden kunnen worden geserialiseerd met behulp van BinaryFormatter
, wat niet veilig is. Neem alleen de .resx
bestanden op in het buildproces dat u vertrouwt.
Parameters
In de volgende tabel worden de parameters van de GenerateResource
taak beschreven.
Parameter | Beschrijving |
---|---|
AdditionalInputs |
Optionele ITaskItem[] parameter.Bevat aanvullende invoer voor de afhankelijkheidscontrole die door deze taak wordt uitgevoerd. Het project en de doelbestanden moeten bijvoorbeeld doorgaans invoer zijn, zodat alle resources opnieuw worden gegenereerd als ze worden bijgewerkt. |
EnvironmentVariables |
Optionele String[] parameter.Hiermee geeft u een matrix van naam-waardeparen van omgevingsvariabelen die moeten worden doorgegeven aan de spawned resgen.exe, naast (of selectief overschrijven) van het reguliere omgevingsblok. |
ExcludedInputPaths |
Optionele ITaskItem[] parameter.Hiermee geeft u een matrix van items die paden opgeven waaruit bijgehouden invoer wordt genegeerd tijdens de up-to-date controle. |
ExecuteAsTool |
Optionele Boolean parameter.Als true , wordt tlbimp.exe en aximp.exe uitgevoerd vanuit het juiste doelframework out-of-proc om de benodigde wrapper-assembly's te genereren. Met deze parameter kunnen meerdere ResolveComReferences worden gebruikt. |
FilesWritten |
Optionele ITaskItem[] uitvoerparameter.Bevat de namen van alle bestanden die naar de schijf zijn geschreven, inclusief het cachebestand, indien van toepassing. Deze parameter is handig voor implementaties van Clean. |
MinimalRebuildFromTracking |
Optionele Boolean parameter.Hiermee wordt een switch opgehaald of ingesteld waarmee wordt aangegeven of bijgehouden incrementele build wordt gebruikt. Als true , is incrementele build ingeschakeld; anders wordt een herbouw geforceerd. |
NeverLockTypeAssemblies |
Optionele Boolean parameter.Hiermee wordt een Booleaanse waarde opgehaald of ingesteld waarmee wordt aangegeven of een nieuwe AppDomain- moet worden gemaakt om de resources ( .resx ) bestanden (waar) te evalueren of om een nieuwe AppDomain te maken alleen wanneer de resourcesbestanden verwijzen naar de assembly van een gebruiker (onwaar). |
OutputResources |
Optionele ITaskItem[] uitvoerparameter.Hiermee geeft u de naam van de gegenereerde bestanden, zoals .resources bestanden. Als u geen naam opgeeft, wordt de naam van het overeenkomende invoerbestand gebruikt en wordt het .resources bestand dat is gemaakt in de map met het invoerbestand geplaatst. |
PublicClass |
Optionele Boolean parameter.Als true , maakt u een sterk getypte resourceklasse als een openbare klasse. |
References |
Optionele String[] parameter.Verwijzingen naar het laden van typen in .resx bestanden van waaruit.
.resx bestandsgegevenselementen kunnen een .NET-type hebben. Wanneer het bestand .resx wordt gelezen, moet dit type worden omgezet. Normaal gesproken wordt dit opgelost met behulp van standaardregels voor het laden van typen. Als u assembly's in References opgeeft, hebben ze voorrang.Deze parameter is niet vereist voor sterk getypte resources. |
SdkToolsPath |
Optionele String parameter.Hiermee geeft u het pad naar de SDK-hulpprogramma's op, zoals resgen.exe. |
Sources |
Vereiste ITaskItem[] parameter.Hiermee geeft u de items die moeten worden geconverteerd. Items die aan deze parameter worden doorgegeven, moeten een van de volgende bestandsextensies hebben: - .txt : hiermee geeft u de extensie op voor een tekstbestand dat moet worden geconverteerd. Tekstbestanden kunnen alleen tekenreeksbronnen bevatten.- .resx : hiermee geeft u de extensie op voor een XML-resourcebestand dat moet worden geconverteerd.- .restext : Hiermee geeft u dezelfde indeling op als .txt . Deze andere extensie is handig als u bronbestanden die resources van andere bronbestanden in uw buildproces bevatten duidelijk wilt onderscheiden.- .resources : hiermee geeft u de extensie op voor een resourcebestand dat moet worden geconverteerd. |
StateFile |
Optionele ITaskItem parameter. Hiermee geeft u het pad naar een optioneel cachebestand dat wordt gebruikt om de afhankelijkheidscontrole van koppelingen in .resx invoerbestanden te versnellen. |
StronglyTypedClassName |
Optionele String parameter.Hiermee geeft u de klassenaam voor de sterk getypte resourceklasse. Als deze parameter niet is opgegeven, wordt de basisnaam van het resourcebestand gebruikt. |
StronglyTypedFilename |
Optionele ITaskItem parameter. Hiermee geeft u de bestandsnaam voor het bronbestand. Als deze parameter niet is opgegeven, wordt de naam van de klasse gebruikt als de basisbestandsnaam, waarbij de extensie afhankelijk is van de taal. Bijvoorbeeld: MyClass.cs. |
StronglyTypedLanguage |
Optionele String parameter.Hiermee geeft u de taal op die moet worden gebruikt bij het genereren van de klassebron voor de sterk getypte resource. Deze parameter moet exact overeenkomen met een van de talen die worden gebruikt door de CodeDomProvider. Bijvoorbeeld: VB of C# .Door een waarde aan deze parameter door te geven, geeft u de taak de opdracht om sterk getypte resources te genereren. |
StronglyTypedManifestPrefix |
Optionele String parameter.Hiermee geeft u de resourcenaamruimte of het manifestvoorvoegsel op dat moet worden gebruikt in de gegenereerde klassebron voor de sterk getypte resource. |
StronglyTypedNamespace |
Optionele String parameter.Hiermee geeft u de naamruimte die moet worden gebruikt voor de gegenereerde klassebron voor de sterk getypte resource. Als deze parameter niet is opgegeven, bevinden alle sterk getypte resources zich in de globale naamruimte. |
TLogReadFiles |
Optionele ITaskItem[] alleen-lezen parameter.Hiermee haalt u een matrix op met items die de logboeken voor het bijhouden van leesbewerkingen vertegenwoordigen. |
TLogWriteFiles |
Optionele ITaskItem[] alleen-lezen parameter.Hiermee haalt u een matrix op met items die de logboeken voor het bijhouden van schrijfbewerkingen vertegenwoordigen. |
ToolArchitecture |
Optionele System.String parameter. Wordt gebruikt om te bepalen of Tracker.exe moet worden gebruikt om ResGen.exete spawnen. Moet parseerbaar zijn voor een lid van de opsomming ExecutableType. Als String.Empty , gebruikt u een heuristiek om een standaardarchitectuur te bepalen. Moet parseerbaar zijn voor een lid van de opsomming Microsoft.Build.Utilities.ExecutableType . |
TrackerFrameworkPath |
Optionele String parameter.Hiermee geeft u het pad naar de juiste .NET Framework-locatie die FileTracker.dllbevat. Indien ingesteld, neemt de gebruiker de verantwoordelijkheid om ervoor te zorgen dat de bitheid van de FileTracker.dll die ze doorgeven overeenkomt met de bitness van de ResGen.exe die ze willen gebruiken. Als deze niet is ingesteld, bepaalt de taak de juiste locatie op basis van de huidige versie van .NET Framework. |
TrackerLogDirectory |
Optionele String parameter.Hiermee geeft u de tussenliggende map waarin de traceringslogboeken van deze taak worden geplaatst. |
TrackerSdkPath |
Optionele String parameter.Hiermee geeft u het pad naar de juiste Windows SDK-locatie die Tracker.exebevat. Indien ingesteld, neemt de gebruiker de verantwoordelijkheid om ervoor te zorgen dat de bitheid van de Tracker.exe die ze doorgeven overeenkomt met de bitness van de ResGen.exe die ze willen gebruiken. Als deze niet is ingesteld, bepaalt de taak de juiste locatie op basis van de huidige Windows SDK. |
TrackFileAccess |
Optionele Boolean parameter. Indien waar, wordt de map van het invoerbestand gebruikt voor het omzetten van relatieve bestandspaden. |
UsePreserializedResources |
Optionele Boolean parameter.Als true , geeft u aan dat niet-tekenreeksresources moeten worden geserialiseerd met behulp van PreserializedResourceWriter in plaats van ResourceWriter, die niet wordt ondersteund op .NET Core of .NET 5 of hoger. |
UseSourcePath |
Optionele Boolean parameter.Als true , geeft u aan dat de map van het invoerbestand moet worden gebruikt voor het omzetten van relatieve bestandspaden. |
Opmerkingen
Omdat .resx
bestanden koppelingen naar andere bronbestanden kunnen bevatten, is het niet voldoende om .resx
en .resources
bestandstijdstempels te vergelijken om te zien of de uitvoer up-to-date is. In plaats daarvan volgt de GenerateResource
taak de koppelingen in de .resx
bestanden en controleert ook de tijdstempels van de gekoppelde bestanden. Dit betekent dat u in het algemeen niet Inputs
en Outputs
kenmerken op het doel met de GenerateResource
taak moet gebruiken, omdat dit ertoe kan leiden dat deze wordt overgeslagen wanneer deze daadwerkelijk moet worden uitgevoerd.
Naast de bovenstaande parameters neemt deze taak parameters over van de TaskExtension-klasse, die zelf wordt overgenomen van de Task-klasse. Zie TaskExtension-basisklassevoor een lijst met deze aanvullende parameters en beschrijvingen.
Wanneer u MSBuild 4.0 gebruikt voor .NET 3.5-projecten, kan de build mislukken op x86-resources. U kunt dit probleem omzeilen door het doel te bouwen als een AnyCPU-assembly.
De parameter UsePreserializedResources
haalt de waarde op uit de eigenschap $(GenerateResourceUsePreserializedResources)
in het normale .NET-buildproces. Deze eigenschap is standaard ingesteld op true
in .NET Core-projecten en -projecten die gebruikmaken van .NET 5 of hoger. U kunt $(GenerateResourceUsePreserializedResources)
instellen op true
om de .NET SDK toe te staan projecten te bouwen die gericht zijn op .NET Framework 4.6.1 of hoger die niet-tekenreeksresources gebruiken. De assembly-System.Resources.Extensions
moet tijdens runtime beschikbaar zijn. Het is beschikbaar in .NET Core 3.0 en hoger en .NET 5 en hoger en kan worden gebruikt in .NET Framework 4.6.1 of hoger via PackageReference.|
Voorbeeld
In het volgende voorbeeld wordt de GenerateResource
taak gebruikt om .resources
bestanden te genereren op basis van de bestanden die zijn opgegeven door de Resx
itemverzameling.
<GenerateResource
Sources="@(Resx)"
OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
De GenerateResource
taak maakt gebruik van de <LogicalName>
metagegevens van een <EmbeddedResource>
item om de resource die is ingesloten in een assembly een naam te geven.
Ervan uitgaande dat de assembly myAssembly heet, genereert de volgende code een ingesloten resource met de naam someQualifier.someResource.resources
:
<ItemGroup>
<EmbeddedResource Include="myResource.resx">
<LogicalName>someQualifier.someResource.resources</LogicalName>
<WithCulture>false</WithCulture>
</EmbeddedResource>
</ItemGroup>
Zonder de <LogicalName>
metagegevens wordt de resource myAssembly.myResource.resources
genoemd. Dit voorbeeld is alleen van toepassing op het buildproces van Visual Basic en Visual C#.