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#.