Freigeben über


.NET für Android–Fehler APT2264

Thema

Das Tool aapt2 kann eine der übergebenen Dateien nicht auflösen. Dies wird in der Regel dadurch verursacht, dass der Pfad länger als die für Fenster zulässige maximale Pfadlänge ist.

Lösung

Die beste Möglichkeit, dies zu vermeiden, besteht darin, sicherzustellen, dass sich Ihr Projekt nicht tief in der Ordnerstruktur befindet. Wenn Sie beispielsweise alle Projekte in Ordnern erstellen, z. B.

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

Möglicherweise treten Probleme nicht nur mit aapt2, sondern auch mit der Ahead-of-Time-Kompilierung auf. Wenn Sie Ihre Projektnamen und Ordnerstrukturen kurz und prägnant halten, kann Ihnen das helfen, diese Probleme zu bewältigen. Anstelle des oben Gesagten könnten Sie beispielsweise

C:\Work\Android\MyBrilliantApp

Was viel kürzer ist und mit viel geringerer Wahrscheinlichkeit auf Pfadprobleme stößt.

Dies ist jedoch nicht immer möglich. Manchmal erfordert ein Projekt oder eine Umgebung tiefe Ordnerstrukturen. Das Aktivieren der Unterstützung von langen Pfaden in Windows reicht möglicherweise aus, damit Ihr Projekt funktioniert. Details dazu finden Sie hier.

Wenn die Unterstützung für lange Pfade nicht funktioniert, kann das Ändern des Standorts von $(BaseIntermediateOutputPath) dazu beitragen, diese Probleme zu lösen. Damit dies funktioniert, muss die Einstellung geändert werden, bevor ein Build oder eine Wiederherstellung erfolgt. Dazu können Sie die MSBuild-Unterstützung Directory.Build.props nutzen.

Erstellen Sie eine Directory.Build.props-Datei in Ihrem Projektmappen- oder Projektverzeichnis, die den $(BaseIntermediateOutputPath) näher am Stamm des Laufwerks neu definiert, um diese Probleme zu beheben. Wenn Sie eine Datei mit dem folgenden Inhalt hinzufügen, wird das obj Verzeichnis an einem anderen Speicherort Ihrer Wahl erstellt.

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

Durch diese Technik werden die Pfadlängen reduziert, die an die verschiedenen Tools gesendet werden, z.B. aapt2. Beachten Sie, dass dies in der Regel nur ein Windows-Problem ist. Daher ist es nicht erforderlich, die $(BaseIntermediateOutputPath) auf Mac- oder Linux-basierten Umgebungen außer Kraft zu setzen. Möglicherweise möchten Sie jedoch überall überschreiben, um Konsistenz zu wahren.