Compartilhar via


Tarefa GenerateResource

Converte entre arquivos .txt e .resx (formato de recurso baseado em XML) e arquivos .resources binários do Common Language Runtime que podem ser inseridos em um executável binário do tempo de execução ou compilados em assemblies satélite. Essa tarefa geralmente é usada para converter arquivos .txt ou .resx em arquivos .resources. A tarefa GenerateResource é funcionalmente semelhante a resgen.exe.

Cuidado

Os recursos em .resx arquivos podem ser serializados usando BinaryFormatter, o que não é seguro. Inclua apenas os .resx arquivos em seu processo de compilação em que você confia.

Parâmetros

A tabela a seguir descreve os parâmetros da tarefa GenerateResource.

Parâmetro Descrição
AdditionalInputs Parâmetro opcional ITaskItem[].

Contém entradas adicionais para a verificação de dependência realizada por tarefa. Por exemplo, os arquivos de projeto e de destino normalmente devem ser entradas, de modo que se eles forem atualizados, todos os recursos serão regenerados.
EnvironmentVariables Parâmetro String[] opcional.

Especifica uma matriz de pares nome-valor das variáveis de ambiente que devem ser passados para o resgen.exe gerado, além (ou substituindo seletivamente) do bloco de ambiente comum.
ExcludedInputPaths Parâmetro opcional ITaskItem[].

Especifica uma matriz de itens que especificam os caminhos dos quais entradas rastreadas serão ignoradas durante a verificação de atualização.
ExecuteAsTool Parâmetro Boolean opcional.

Se true, executa tlbimp.exe e aximp.exe da estrutura de destino apropriada fora de processo para gerar os assemblies de wrapper necessários. Esse parâmetro habilita multi-targeting de ResolveComReferences.
FilesWritten Parâmetro de saída ITaskItem[] opcional.

Contém os nomes de todos os arquivos gravados em disco. Isso inclui o arquivo de cache, se houver. Esse parâmetro é útil para implementações do Clean.
MinimalRebuildFromTracking Parâmetro Boolean opcional.

Obtém ou define uma opção que especifica se o build incremental controlado será usado. Se true, o build incremental é ativado; caso contrário, será forçada uma recompilação.
NeverLockTypeAssemblies Parâmetro Boolean opcional.

Obtém ou define um valor booliano que especifica se é preciso criar um novo AppDomain para avaliar os arquivos (verdadeiro) de recursos (.resx) ou criar um novo AppDomain somente quando os arquivos de recursos fizerem referência ao assembly do usuário (falso).
OutputResources Parâmetro de saída ITaskItem[] opcional.

Especifica o nome dos arquivos gerados, como arquivos .resources. Se você não especificar um nome, o nome do arquivo de entrada correspondente será usado e o arquivo .resources criado será colocado no diretório que contém o arquivo de entrada.
PublicClass Parâmetro Boolean opcional.

Se true, cria uma classe de recurso fortemente tipada como uma classe pública.
References Parâmetro String[] opcional.

Referências das quais carregar tipos em arquivos .resx. Elementos de dados de arquivo .resx podem ter um tipo .NET. Quando o arquivo .resx é lido, esse tipo precisa ser resolvido. Normalmente, ele é resolvido com êxito usando o tipo padrão ao carregar regras. Se você fornecer assemblies em References, eles terão prioridade.

Esse parâmetro não é necessário para recursos fortemente tipados.
SdkToolsPath Parâmetro String opcional.

Especifica o caminho para o SDK Tools, como resgen.exe.
Sources Parâmetro ITaskItem[] obrigatório.

Especifica os itens a converter. Itens passados para esse parâmetro devem ter uma das seguintes extensões de arquivo:

- .txt: especifica a extensão a ser convertida por um arquivo de texto. Os arquivos de texto só podem conter recursos de cadeia de caracteres.
- .resx: especifica a extensão a ser convertida para um arquivo de recurso baseado em XML.
- .restext: especifica o mesmo formato como .txt. Essa extensão diferente é útil se você quiser distinguir claramente os arquivos de origem que contêm recursos de outros arquivos de origem no processo de build.
- .resources: especifica a extensão a ser convertida para um arquivo de recurso.
StateFile Parâmetro ITaskItem opcional.

Especifica o caminho para um arquivo de cache opcional usado para acelerar a verificação de dependência de links em arquivos de entrada .resx.
StronglyTypedClassName Parâmetro String opcional.

Especifica o nome de classe para a classe de recurso fortemente tipada. Se esse parâmetro não for especificado, o nome base do arquivo de recurso será usado.
StronglyTypedFilename Parâmetro ITaskItem opcional.

Especifica o nome do arquivo para o arquivo de origem. Se esse parâmetro não for especificado, o nome de classe será usado como o nome de arquivo base, com a extensão dependendo da linguagem. Por exemplo: MyClass.cs.
StronglyTypedLanguage Parâmetro String opcional.

Especifica a linguagem a ser usada ao gerar a fonte de classe para o recurso fortemente tipado. Esse parâmetro deve corresponder exatamente uma das linguagens usadas por CodeDomProvider. Por exemplo: VB ou C#.

Ao passar um valor para esse parâmetro, você instrui a tarefa a gerar recursos fortemente tipados.
StronglyTypedManifestPrefix Parâmetro String opcional.

Especifica o prefixo de manifesto ou namespace de recurso para usar na origem de classe gerada para o recurso fortemente tipado.
StronglyTypedNamespace Parâmetro String opcional.

Especifica o namespace para usar na origem de classe gerada para o recurso fortemente tipado. Se esse parâmetro não for especificado, todos os recursos fortemente tipados estarão no namespace global.
TLogReadFiles Parâmetro ITaskItem[] somente leitura opcional.

Obtém uma matriz de itens que representam os logs de acompanhamento de leitura.
TLogWriteFiles Parâmetro ITaskItem[] somente leitura opcional.

Obtém uma matriz de itens que representam os logs de acompanhamento de gravação.
ToolArchitecture Parâmetro System.String opcional.

Usado para determinar se o Tracker.exe precisa ou não ser usado para gerar ResGen.exe.

Deve ser analisável para um membro da enumeração ExecutableType. Se String.Empty, usa uma heurística para determinar uma arquitetura padrão. Deve ser analisável para um membro da enumeração Microsoft.Build.Utilities.ExecutableType.
TrackerFrameworkPath Parâmetro String opcional.

Especifica o caminho para o local apropriado do .NET Framework que contém FileTracker.dll.

Se ele for definido, o usuário assumirá a responsabilidade por garantir que o número de bit de FileTracker.dll passado corresponda ao número de bit de ResGen.exe que ele pretende usar. Se não for definido, a tarefa decide o local apropriado com base na versão atual do .NET Framework.
TrackerLogDirectory Parâmetro String opcional.

Especifica o diretório intermediário no qual os logs de acompanhamento da execução dessa tarefa serão colocados.
TrackerSdkPath Parâmetro String opcional.

Especifica o caminho para o local apropriado do SDK do Windows que contém Tracker.exe.

Se ele for definido, o usuário assumirá a responsabilidade por garantir que o número de bit de Tracker.exe passado corresponda ao número de bit de ResGen.exe que ele pretende usar. Se não for definido, a tarefa decide o local apropriado com base no SDK do Windows atual.
TrackFileAccess Parâmetro Boolean opcional.

Se é true, o diretório do arquivo de entrada é usado para resolver caminhos de arquivo relativos.
UsePreserializedResources Parâmetro Boolean opcional.

Se true, especifica que os recursos sem cadeia de caracteres devem ser serializados usando PreserializedResourceWriter em vez de ResourceWriter, o que não tem suporte no .NET Core ou no .NET 5 ou posterior.
UseSourcePath Parâmetro Boolean opcional.

Se é true, especifica que o diretório do arquivo de entrada deve ser usado para resolver caminhos de arquivo relativos.

Comentários

Como os arquivos .resx podem conter links para outros arquivos de recurso, não é suficiente simplesmente comparar carimbos de data/hora de arquivos .resx e .resources para ver se as saídas estão atualizadas. Em vez disso, a tarefa GenerateResource segue os links nos arquivos .resx e verifica também os carimbos de data/hora dos arquivos vinculados. Isso significa que, geralmente, você não deve usar os atributos Inputs e Outputs no destino que contém a tarefa GenerateResource, pois isso pode fazer com que ela seja ignorada quando, na verdade, ela deve ser executada.

Além dos parâmetros listados acima, essa tarefa herda parâmetros da classe TaskExtension, que herda da classe Task. Para obter uma lista desses parâmetros adicionais e suas descrições, confira Classe base TaskExtension.

Ao usar o MSBuild 4.0 para projetos de destino do .NET 3.5, o build pode falhar em recursos x86. Para contornar esse problema, é possível criar o destino como um assembly AnyCPU.

O parâmetro UsePreserializedResources obtém seu valor da propriedade $(GenerateResourceUsePreserializedResources) no processo de build normal do .NET. Essa propriedade é definida como true por padrão em projetos do .NET Core e projetos que usam o .NET 5 ou posterior. Você pode definir $(GenerateResourceUsePreserializedResources) como true para permitir que o SDK do .NET compile projetos direcionados para .NET Framework 4.6.1 ou posterior que usam recursos sem cadeia de caracteres. O assembly System.Resources.Extensions deve estar disponível em runtime. Ele está disponível no .NET Core 3.0 e posterior e no .NET 5 e posterior e pode ser usado no .NET Framework 4.6.1 ou posterior por meio de PackageReference.|

Exemplo

O exemplo a seguir usa a tarefa GenerateResource para gerar arquivos .resources com base nos arquivos especificados pela coleção de itens Resx.

<GenerateResource
    Sources="@(Resx)"
    OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
    <Output
        TaskParameter="OutputResources"
        ItemName="Resources"/>
</GenerateResource>

A tarefa GenerateResource usa os metadados <LogicalName> de um item <EmbeddedResource> para nomear o recurso que está inserido em um assembly.

Supondo que o assembly seja nomeado myAssembly, o seguinte código gera um recurso inserido chamado someQualifier.someResource.resources:

<ItemGroup>
    <EmbeddedResource Include="myResource.resx">
        <LogicalName>someQualifier.someResource.resources</LogicalName>
    </EmbeddedResource>
</ItemGroup>

Sem os metadados <LogicalName>, o recurso seria nomeado myAssembly.myResource.resources. Este exemplo aplica-se somente ao processo de build do Visual Basic e Visual C#.

Confira também