Partager via


Erreur .NET pour Android APT2264

Problème

L’outil aapt2 ne peut pas résoudre l’un des fichiers qu’il a passés. Cela est généralement dû au fait que le chemin d’accès est plus long que la longueur maximale autorisée sur les fenêtres.

Solution

La meilleure façon d’éviter cela consiste à s’assurer que votre projet n’est pas situé dans la structure des dossiers. Par exemple, si vous créez tous vos projets dans des dossiers tels que

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

vous pourriez bien rencontrer des problèmes non seulement avec aapt2 mais aussi avec la compilation à l'avance. Le fait de garder les noms de votre projet et les structures de dossiers courts et concis vous aidera à contourner ces problèmes. Par exemple, au lieu du fichier ci-dessus, vous pouvez utiliser

C:\Work\Android\MyBrilliantApp

Ce qui est beaucoup plus court et beaucoup moins susceptible de rencontrer des problèmes liés aux chemins.

Toutefois, cela n’est pas toujours possible. Parfois, un projet ou un environnement nécessite des structures de dossiers approfondies. L’activation de la prise en charge des chemins longs dans Windows peut être suffisante pour que votre projet fonctionne. Vous trouverez plus d’informations sur la procédure à suivre ici.

Si la prise en charge des chemins d'accès longs ne fonctionne pas, modifier l’emplacement du $(BaseIntermediateOutputPath) peut aider à résoudre ces problèmes. Pour que cela fonctionne, le paramètre DOIT être modifié avant la génération ou la restauration. Pour ce faire, vous pouvez utiliser le support MSBuild Directory.Build.props.

Créer un fichier Directory.Build.props dans votre solution ou répertoire de projet, ce qui redéfinit le $(BaseIntermediateOutputPath) pour le rapprocher de la racine du lecteur, ce qui résoudra ces problèmes. L’ajout d’un fichier avec le contenu suivant crée le obj répertoire dans un autre emplacement de votre choix.

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

L’utilisation de cette technique réduit les longueurs des chemins envoyés aux différents outils comme aapt2. Notez qu’il s’agit généralement uniquement d’un problème Windows. Il n’est donc pas nécessaire de remplacer les $(BaseIntermediateOutputPath) environnements Mac ou Linux. Toutefois, vous souhaiterez peut-être remplacer partout pour être cohérent.