Поделиться через


Ошибка .NET для Android APT2264

Проблема

Средство aapt2 не может разрешить один из переданных файлов. Обычно это вызвано тем, что путь превышает максимальную длину пути, разрешенную в окнах.

Решение

Лучший способ избежать этого заключается в том, чтобы убедиться, что проект не находится глубоко в структуре папок. Например, если вы создаете все проекты в таких папках, как

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

Вы можете столкнуться с проблемами не только aapt2 , но и с заранеей компиляцией. Краткое сохранение имен проектов и структур папок поможет обойти эти проблемы. Например, вместо приведенного выше можно использовать

C:\Work\Android\MyBrilliantApp

Что гораздо короче и гораздо реже сталкивается с проблемами пути.

Однако это не всегда возможно. Иногда для проекта или среды требуются глубокие структуры папок. Включение поддержки длинного пути в Windows может быть достаточно для работы проекта. Подробные сведения о том, как это сделать, можно найти здесь.

Если поддержка длинного $(BaseIntermediateOutputPath) пути не работает, изменение расположения может помочь решить эти проблемы. Чтобы этот параметр работал, необходимо изменить перед созданием или восстановлением ЛЮБОЙ сборки. Для этого можно использовать поддержку MSBuild Directory.Build.props .

Directory.Build.props Создайте файл в каталоге решения или проекта, который переопределяет $(BaseIntermediateOutputPath) место ближе к корню диска с решением этих проблем. Добавление файла со следующим содержимым создаст obj каталог в другом расположении выбранного расположения.

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

Использование этого метода уменьшит длину путей, отправленных различным средствам, таким как aapt2. Обратите внимание, что это, как правило, только проблема с Windows. Поэтому не нужно переопределять $(BaseIntermediateOutputPath) среды на основе Mac или Linux. Однако может потребоваться переопределить везде, чтобы быть согласованным.