Ler em inglês

Compartilhar via


APT2264 de erro do .NET para Android

Problema

A ferramenta aapt2 não consegue resolver um dos arquivos que foram passados. Isso geralmente é causado pelo caminho ser maior do que o comprimento máximo do caminho permitido no Windows.

Solução

A melhor maneira de evitar isso é garantir que seu projeto não esteja localizado profundamente na estrutura de pastas. Por exemplo, se você criar todos os seus projetos em pastas como

C:\Users\shelly\Visual Studio 2022\Android\MyProjects\Com.SomeReallyLongCompanyName.MyBrillantApplication\MyBrilliantApplicaiton.Android\

você pode encontrar problemas não apenas aapt2 , mas também com a compilação antecipada. Manter os nomes dos projetos e as estruturas de pastas curtos e concisos ajudará a contornar esses problemas. Por exemplo, em vez do acima, você pode usar

C:\Work\Android\MyBrilliantApp

Que é muito mais curto e muito menos provável de encontrar problemas de caminho.

No entanto, isso nem sempre é possível. Às vezes, um projeto ou um ambiente requer estruturas de pastas profundas. Habilitar o suporte a caminhos longos no Windows pode ser suficiente para fazer seu projeto funcionar. Detalhes sobre como fazer isso podem ser encontrados aqui.

Se o suporte a caminhos longos não funcionar, alterar a localização do $(BaseIntermediateOutputPath) pode ajudar a resolver esses problemas. Para que isso funcione, a configuração DEVE ser alterada antes que ocorra QUALQUER compilação ou restauração. Para fazer isso, você pode usar o suporte do MSBuild Directory.Build.props .

Criar um Directory.Build.props arquivo em sua solução ou diretório de projeto que redefine o $(BaseIntermediateOutputPath) para algum lugar mais próximo da raiz da unidade com resolver esses problemas. Adicionar um arquivo com o conteúdo a seguir criará o obj diretório em um local diferente de sua escolha.

<Project>
  <PropertyGroup>
      <BaseIntermediateOutputPath Condition=" '$(OS)' == 'Windows_NT' ">C:\Intermediate\$(ProjectName)</BaseIntermediateOutputPath>
      <BaseIntermediateOutputPath Condition=" '$(OS)' != 'Windows_NT' ">/tmp/Intermediate/$(ProjectName)</BaseIntermediateOutputPath>
  </PropertyGroup>
</Project>

O uso dessa técnica reduzirá os comprimentos dos caminhos enviados para as várias ferramentas, como aapt2. Observe que isso geralmente é apenas um problema do Windows. Portanto, não há necessidade de substituir os $(BaseIntermediateOutputPath) ambientes baseados em Mac ou Linux. No entanto, você pode querer substituir em todos os lugares para ser consistente.