Androidhoz készült .NET-hiba APT2264

Probléma

Az eszköz aapt2 nem tudja feloldani az átadott fájlok egyikét. Ezt általában az okozza, hogy az elérési út hosszabb, mint az ablakokon megengedett maximális elérési úthossz.

Megoldás

Ennek elkerülésének legjobb módja annak biztosítása, hogy a projekt ne legyen mélyen a mappaszerkezetben. Ha például az összes projektet mappákban hozza létre, például

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

előfordulhat, hogy nem csak aapt2 , hanem az Idő előtt összeállítással is problémákba ütközik. Ha röviden tartja a projektneveket és a mappastruktúrákat, az segít megkerülni ezeket a problémákat. Például a fenti helyett használhatja a

C:\Work\Android\MyBrilliantApp

Ami sokkal rövidebb és sokkal kevésbé valószínű, hogy elérésiút-problémákba ütközik.

Ez azonban nem mindig lehetséges. Előfordulhat, hogy egy projekthez vagy környezethez mély mappastruktúrákra van szükség. A hosszú távú támogatás engedélyezése a Windowsban elegendő lehet a projekt működéséhez. Ennek részletei itt találhatók.

Ha a hosszú út támogatása nem működik, a hely módosítása segíthet megoldani ezeket a $(BaseIntermediateOutputPath) problémákat. Ahhoz, hogy ez működjön, a beállítást módosítani kell, mielőtt bármilyen buildelés vagy visszaállítás történne. Ehhez használhatja az MSBuild-támogatást Directory.Build.props .

Készítsen egy Directory.Build.props fájlt a megoldás vagy a projektkönyvtárban, amely újradefiniálja a $(BaseIntermediateOutputPath)-et egy, a meghajtó gyökeréhez közelebb eső útvonalra, és megoldja ezeket a problémákat. Ha a következő tartalommal rendelkező fájlt ad hozzá, a obj könyvtárat egy másik helyen hozza létre.

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

Ez a technika csökkenti a különböző eszközöknek küldött útvonalak hosszát, például aapt2. Vegye figyelembe, hogy ez általában csak Windows-probléma. Ezért nincs szükség a $(BaseIntermediateOutputPath) felülbírálására Mac vagy Linux környezetekben. Azonban érdemes lehet mindenhol felülbírálni, hogy konzisztens legyen.