GenerateResource — zadanie
Konwertuje pliki .txt
i .resx
(format zasobów oparty na formacie XML) oraz pliki binarne środowiska uruchomieniowego języka wspólnego .resources
, które mogą być osadzone w pliku wykonywalnym binarnym środowiska uruchomieniowego lub skompilowane w zestawy satelitarne. To zadanie jest zwykle używane do konwertowania plików .txt
lub .resx
na pliki .resources
. Zadanie GenerateResource
jest funkcjonalnie podobne do resgen.exe.
Ostrożność
Zasoby w plikach .resx
mogą być serializowane przy użyciu BinaryFormatter
, co nie jest bezpieczne. Uwzględnij tylko te pliki .resx
w procesie kompilacji, któremu ufasz.
Parametry
W poniższej tabeli opisano parametry zadania GenerateResource
.
Parametr | Opis |
---|---|
AdditionalInputs |
Opcjonalny parametr ITaskItem[] .Zawiera dodatkowe dane wejściowe do sprawdzania zależności wykonywanego przez to zadanie. Na przykład pliki projektu i elementów docelowych zwykle powinny być danymi wejściowymi, aby w przypadku ich aktualizacji wszystkie zasoby były generowane ponownie. |
EnvironmentVariables |
Opcjonalny parametr String[] .Określa tablicę par nazwa-wartość zmiennych środowiskowych, które powinny być przekazywane do zduplikowanego resgen.exe, oprócz (lub selektywnie zastępowania) zwykłego bloku środowiska. |
ExcludedInputPaths |
Opcjonalny parametr ITaskItem[] .Określa tablicę elementów, które określają ścieżki, z których śledzone dane wejściowe będą ignorowane podczas sprawdzania aktualnego. |
ExecuteAsTool |
Opcjonalny parametr Boolean .Jeśli true , uruchamia tlbimp.exe i aximp.exe z odpowiedniej struktury docelowej out-of-proc w celu wygenerowania niezbędnych zestawów otoki. Ten parametr umożliwia wielowersyjność ResolveComReferences . |
FilesWritten |
Opcjonalny parametr wyjściowy ITaskItem[] .Zawiera nazwy wszystkich plików zapisanych na dysku, w tym plik pamięci podręcznej, jeśli istnieje. Ten parametr jest przydatny w przypadku implementacji funkcji Clean. |
MinimalRebuildFromTracking |
Opcjonalny parametr Boolean .Pobiera lub ustawia przełącznik określający, czy będzie używana śledzona kompilacja przyrostowa. Jeśli true , kompilacja przyrostowa jest włączona; w przeciwnym razie zostanie wymuszona ponowna kompilacja. |
NeverLockTypeAssemblies |
Opcjonalny parametr Boolean .Pobiera lub ustawia wartość logiczną określającą, czy utworzyć nową AppDomain do oceny zasobów ( .resx ) plików (true) lub utworzyć nowe AppDomain tylko wtedy, gdy pliki zasobów odwołują się do zestawu użytkownika (false). |
OutputResources |
Opcjonalny parametr wyjściowy ITaskItem[] .Określa nazwę wygenerowanych plików, takich jak pliki .resources . Jeśli nie określisz nazwy, zostanie użyta nazwa pasującego pliku wejściowego, a utworzony plik .resources zostanie umieszczony w katalogu zawierającym plik wejściowy. |
PublicClass |
Opcjonalny parametr Boolean .Jeśli true , tworzy silnie typizowana klasa zasobów jako klasa publiczna. |
References |
Opcjonalny parametr String[] .Odwołania do typów ładowania w plikach .resx z.
.resx elementy danych pliku mogą mieć typ .NET. Po odczytaniu pliku resx należy rozpoznać ten typ. Zazwyczaj jest on rozwiązywany pomyślnie przy użyciu reguł ładowania typu standardowego. Jeśli podajesz zestawy w References , mają pierwszeństwo.Ten parametr nie jest wymagany dla silnie typiowanych zasobów. |
SdkToolsPath |
Opcjonalny parametr String .Określa ścieżkę do narzędzi zestawu SDK, takich jak resgen.exe. |
Sources |
Wymagany parametr ITaskItem[] .Określa elementy do konwersji. Elementy przekazane do tego parametru muszą mieć jedno z następujących rozszerzeń plików: - .txt : określa rozszerzenie pliku tekstowego do konwersji. Pliki tekstowe mogą zawierać tylko zasoby ciągów.- .resx : określa rozszerzenie pliku zasobów opartego na formacie XML do konwersji.- .restext : określa ten sam format co .txt . To inne rozszerzenie jest przydatne, jeśli chcesz wyraźnie odróżnić pliki źródłowe zawierające zasoby z innych plików źródłowych w procesie kompilacji.- .resources : określa rozszerzenie pliku zasobu do konwersji. |
StateFile |
Opcjonalny parametr ITaskItem. Określa ścieżkę do opcjonalnego pliku pamięci podręcznej, który służy do przyspieszenia sprawdzania zależności łączy w .resx plików wejściowych. |
StronglyTypedClassName |
Opcjonalny parametr String .Określa nazwę klasy silnie typizowanej klasy zasobów. Jeśli ten parametr nie zostanie określony, zostanie użyta podstawowa nazwa pliku zasobu. |
StronglyTypedFilename |
Opcjonalny parametr ITaskItem. Określa nazwę pliku źródłowego. Jeśli ten parametr nie zostanie określony, nazwa klasy jest używana jako nazwa pliku podstawowego, z rozszerzeniem zależnym od języka. Na przykład: MyClass.cs. |
StronglyTypedLanguage |
Opcjonalny parametr String .Określa język używany podczas generowania źródła klasy dla silnie typizowanego zasobu. Ten parametr musi być zgodny z dokładnie jednym z języków używanych przez dostawcę CodeDomProvider. Na przykład: VB lub C# .Przekazując wartość do tego parametru, należy poinstruować zadanie, aby wygenerowało silnie typizowane zasoby. |
StronglyTypedManifestPrefix |
Opcjonalny parametr String .Określa przestrzeń nazw zasobów lub prefiks manifestu do użycia w wygenerowanym źródle klasy dla silnie typizowanego zasobu. |
StronglyTypedNamespace |
Opcjonalny parametr String .Określa przestrzeń nazw do użycia dla wygenerowanego źródła klasy dla silnie typizowanego zasobu. Jeśli ten parametr nie zostanie określony, wszystkie silnie typizowane zasoby znajdują się w globalnej przestrzeni nazw. |
TLogReadFiles |
Opcjonalny parametr ITaskItem[] tylko do odczytu.Pobiera tablicę elementów reprezentujących dzienniki śledzenia odczytu. |
TLogWriteFiles |
Opcjonalny parametr ITaskItem[] tylko do odczytu.Pobiera tablicę elementów reprezentujących dzienniki śledzenia zapisu. |
ToolArchitecture |
Opcjonalny parametr System.String. Służy do określania, czy Tracker.exe należy użyć do zduplikowania ResGen.exe. Należy przeanalizować element członkowski wyliczenia ExecutableType. Jeśli String.Empty , użyj metody heurystycznej do określenia architektury domyślnej. Należy przeanalizować element członkowski wyliczenia Microsoft.Build.Utilities.ExecutableType . |
TrackerFrameworkPath |
Opcjonalny parametr String .Określa ścieżkę do odpowiedniej lokalizacji programu .NET Framework, która zawiera FileTracker.dll. W przypadku ustawienia użytkownik ponosi odpowiedzialność za upewnienie się, że bitowość FileTracker.dll, którą przekazuje, jest zgodna z bitowością ResGen.exe, której zamierza użyć. Jeśli nie zostanie ustawiona, zadanie decyduje o odpowiedniej lokalizacji na podstawie bieżącej wersji programu .NET Framework. |
TrackerLogDirectory |
Opcjonalny parametr String .Określa katalog pośredni, do którego zostaną umieszczone dzienniki śledzenia z uruchamiania tego zadania. |
TrackerSdkPath |
Opcjonalny parametr String .Określa ścieżkę do odpowiedniej lokalizacji zestawu Windows SDK, która zawiera Tracker.exe. W przypadku ustawienia użytkownik ponosi odpowiedzialność za upewnienie się, że bitowość Tracker.exe, którą przekazuje, jest zgodna z bitowością ResGen.exe, której zamierza użyć. Jeśli nie zostanie ustawiona, zadanie decyduje o odpowiedniej lokalizacji na podstawie bieżącego zestawu Windows SDK. |
TrackFileAccess |
Opcjonalny parametr Boolean. Jeśli to prawda, katalog pliku wejściowego jest używany do rozpoznawania względnych ścieżek plików. |
UsePreserializedResources |
Opcjonalny parametr Boolean .Jeśli true , określa, że zasoby inne niż ciąg mają być serializowane przy użyciu PreserializedResourceWriter zamiast ResourceWriter, który nie jest obsługiwany na platformie .NET Core lub .NET 5 lub nowszym. |
UseSourcePath |
Opcjonalny parametr Boolean .Jeśli true , określa, że katalog pliku wejściowego ma być używany do rozpoznawania względnych ścieżek plików. |
Uwagi
Ponieważ pliki .resx
mogą zawierać linki do innych plików zasobów, nie wystarczy po prostu porównać .resx
i .resources
sygnatury czasowe plików, aby sprawdzić, czy dane wyjściowe są aktualne. Zamiast tego zadanie GenerateResource
jest zgodne z linkami w plikach .resx
i sprawdza również znaczniki czasu połączonych plików. Oznacza to, że zazwyczaj nie należy używać atrybutów Inputs
i Outputs
w obiekcie docelowym zawierającym zadanie GenerateResource
, ponieważ może to spowodować pominięcie go, gdy faktycznie powinno zostać uruchomione.
Oprócz parametrów wymienionych powyżej to zadanie dziedziczy parametry z klasy TaskExtension, która sama dziedziczy z klasy Task. Aby uzyskać listę tych dodatkowych parametrów i ich opisów, zobacz TaskExtension, klasa bazowa.
W przypadku używania programu MSBuild 4.0 do docelowych projektów platformy .NET 3.5 kompilacja może zakończyć się niepowodzeniem w zasobach x86. Aby obejść ten problem, możesz skompilować element docelowy jako zestaw AnyCPU.
Parametr UsePreserializedResources
pobiera wartość z właściwości $(GenerateResourceUsePreserializedResources)
w normalnym procesie kompilacji platformy .NET. Ta właściwość jest domyślnie ustawiona na true
w projektach i projektach platformy .NET Core korzystających z platformy .NET 5 lub nowszej. Można ustawić $(GenerateResourceUsePreserializedResources)
na true
, aby umożliwić zestawowi .NET SDK kompilowanie projektów przeznaczonych dla programu .NET Framework 4.6.1 lub nowszego, które używają zasobów innych niż ciąg. Zestaw System.Resources.Extensions
musi być dostępny w czasie wykonywania. Jest ona dostępna w programie .NET Core 3.0 lub nowszym oraz na platformie .NET 5 lub nowszym oraz może być używana w programie .NET Framework 4.6.1 lub nowszym za pośrednictwem funkcji PackageReference.|
Przykład
W poniższym przykładzie użyto zadania GenerateResource
do wygenerowania plików .resources
z plików określonych w kolekcji elementów Resx
.
<GenerateResource
Sources="@(Resx)"
OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
Zadanie GenerateResource
używa metadanych <LogicalName>
elementu <EmbeddedResource>
, aby nazwać zasób osadzony w zestawie.
Zakładając, że zestaw ma nazwę myAssembly, następujący kod generuje osadzony zasób o nazwie someQualifier.someResource.resources
:
<ItemGroup>
<EmbeddedResource Include="myResource.resx">
<LogicalName>someQualifier.someResource.resources</LogicalName>
<WithCulture>false</WithCulture>
</EmbeddedResource>
</ItemGroup>
Bez metadanych <LogicalName>
zasób ma nazwę myAssembly.myResource.resources
. Ten przykład dotyczy tylko procesu kompilacji Visual Basic i Visual C#.
Zobacz też
- Tasks
- — dokumentacja zadania