.NET MAUI Android-alkalmazás csatolása
Az alkalmazás létrehozásakor a .NET többplatformos alkalmazás felhasználói felülete (.NET MAUI) használhat egy ILLink nevű linkert az alkalmazás általános méretének csökkentéséhez. ILLink csökkenti a méretet a fordító által létrehozott köztes kód elemzésével. Eltávolítja a nem használt metódusokat, tulajdonságokat, mezőket, eseményeket, szerkezeteket és osztályokat egy olyan alkalmazás létrehozásához, amely csak az alkalmazás futtatásához szükséges kód- és szerelvényfüggőségeket tartalmazza.
Összekötő viselkedése
A linkerrel levághatja a .NET MAUI Android-alkalmazásait. Ha a vágás engedélyezve van, a csatoló érintetlenül hagyja a szerelvényeket, és az alkalmazás által nem használt típusok és tagok eltávolításával csökkenti az SDK-szerelvények méretét.
A Linker viselkedése az alkalmazás minden buildkonfigurációjához konfigurálható. Alapértelmezés szerint a vágás le van tiltva a hibakeresési buildek esetében, és engedélyezve van a kiadási buildekhez.
Figyelmeztetés
Ha engedélyezi a hivatkozáskezelőt az alkalmazás hibakeresési konfigurációjához, azzal akadályozhatja a hibakeresési élményt, mivel eltávolíthatja azokat a tulajdonság-tartozékokat, amelyek lehetővé teszik az objektumok állapotának vizsgálatát.
Hogy a trimmelés engedélyezett legyen:
A Visual Studióban a Megoldáskezelőterületen kattintson a jobb gombbal a .NET MAUI-alkalmazásprojektre, és válassza a Tulajdonságoklehetőséget. Ezután lépjen az Android > Beállítások lapra, és győződjön meg arról, hogy a kiadás buildkonfigurációjához engedélyezve van a vágás:
Kód megőrzése
Amikor a trimmert használja, az néha eltávolítja a kódot, amelyet dinamikusan vagy akár közvetett módon is meghívhatott. Megadhatja a vágónak, hogy őrizze meg a tagokat azzal, hogy ellátja őket a DynamicDependency
attribútummal. Ez az attribútum a tagok típusától és részhalmazától, illetve adott tagoktól való függőség kifejezésére használható.
Fontos
A BCL minden olyan tagja el van távolításra jelölve, amelyről nem állapítható meg statikusan, hogy használja az alkalmazás.
A DynamicDependency
attribútum konstruktorokra, mezőkre és metódusokra alkalmazható:
[DynamicDependency("Helper", "MyType", "MyAssembly")]
static void RunHelper()
{
var helper = Assembly.Load("MyAssembly").GetType("MyType").GetMethod("Helper");
helper.Invoke(null, null);
}
Ebben a példában a DynamicDependency
biztosítja, hogy a Helper
metódus megmarad. Az attribútum nélkül a vágás eltávolítaná Helper
-t MyAssembly
-ből, vagy teljesen eltávolítaná MyAssembly
-t, amennyiben máshol nem hivatkoznak rá.
Az attribútum egy string
vagy a DynamicallyAccessedMembers
attribútumon keresztül adja meg a megtartandó tagot. A típus és a szerelvény implicit módon szerepel az attribútumkörnyezetben, vagy explicit módon meg van adva az attribútumban (Type
vagy string
s a típus és a szerelvény neve alapján).
A típus- és tag stringek a C# dokumentáció megjegyzésazonosító stringjének egy változatát használják ésformátumban, előtag nélkül. A tagsztring nem tartalmazhatja a deklarálási típus nevét, és kihagyhatja a paramétereket a megadott név összes tagjának megtartásához. Az alábbi példák érvényes felhasználási módokat mutatnak be:
[DynamicDependency("Method()")]
[DynamicDependency("Method(System,Boolean,System.String)")]
[DynamicDependency("MethodOnDifferentType()", typeof(ContainingType))]
[DynamicDependency("MemberName")]
[DynamicDependency("MemberOnUnreferencedAssembly", "ContainingType", "UnreferencedAssembly")]
[DynamicDependency("MemberName", "Namespace.ContainingType.NestedType", "Assembly")]
// generics
[DynamicDependency("GenericMethodName``1")]
[DynamicDependency("GenericMethod``2(``0,``1)")]
[DynamicDependency("MethodWithGenericParameterTypes(System.Collections.Generic.List{System.String})")]
[DynamicDependency("MethodOnGenericType(`0)", "GenericType`1", "UnreferencedAssembly")]
[DynamicDependency("MethodOnGenericType(`0)", typeof(GenericType<>))]
Szerelvények megőrzése
Megadhatja azokat a szerelvényeket, amelyeket ki kell zárni a vágási folyamatból, miközben más szerelvényeket is levághat. Ez a módszer akkor lehet hasznos, ha nem tudja könnyen használni a DynamicDependency
attribútumot, vagy nem tudja szabályozni a levágott kódot.
Ha az összes szerelvényt levágja, megadhatja a vágónak, hogy hagyja ki a szerelvényt, ha beállít egy TrimmerRootAssembly
MSBuild elemet a projektfájlban:
<ItemGroup>
<TrimmerRootAssembly Include="MyAssembly" />
</ItemGroup>
Jegyzet
A .dll
bővítmény nem szükséges az TrimmerRootAssembly
MSBuild tulajdonság beállításakor.
Ha a nyíró kihagy egy összetevőt, akkor gyökerezőnektekinthető, ami azt jelenti, hogy az és az összes statikusan értelmezhető függősége megmarad. Kihagyhatja a további szerelvényeket, ha hozzáad több TrimmerRootAssembly
MSBuild tulajdonságot a <ItemGroup>
-hez.
Szerelvények, típusok és tagok megőrzése
A vágónak átadhat egy XML-leírásfájlt, amely meghatározza, hogy mely szerelvényeket, típusokat és tagokat kell megőrizni.
Ha ki szeretne zárni egy tagot a vágási folyamatból az összes szerelvény levágásakor, állítsa a TrimmerRootDescriptor
MSBuild elemet a projektfájlban arra az XML-fájlra, amely meghatározza a kizárni kívánt tagokat:
<ItemGroup>
<TrimmerRootDescriptor Include="MyRoots.xml" />
</ItemGroup>
Aztán az XML-fájl a metsző leíró formátumot használja annak meghatározására, hogy mely tagokat zárják ki:
<linker>
<assembly fullname="MyAssembly">
<type fullname="MyAssembly.MyClass">
<method name="DynamicallyAccessedMethod" />
</type>
</assembly>
</linker>
Ebben a példában az XML-fájl egy olyan metódust határoz meg, amelyet az alkalmazás dinamikusan elér, és amely nincs kizárva a vágásból.
Ha egy szerelvény, típus vagy tag szerepel az XML-ben, az alapértelmezett művelet a megőrzés, ami azt jelenti, hogy függetlenül attól, hogy a vágó azt használja-e vagy sem, megmarad a kimenetben.
Jegyzet
A tartósítási címkék nem egyértelműek. Ha nem adja meg a következő részletességi szintet, az az összes gyermekre kiterjed. Ha egy szerelvény típusok nélkül szerepel a listán, akkor a rendszer megőrzi a szerelvény összes típusát és tagját.
Szerelvény megjelölése vágásbiztosként
Ha van egy kódtár a projektben, vagy Ön egy újrafelhasználható kódtár fejlesztője, és azt szeretné, hogy a vágó a szerelvényt vághatóként kezelje, a szerelvényt vágásbiztosként megjelölheti úgy, hogy hozzáadja a IsTrimmable
MSBuild tulajdonságot a szerelvény projektfájljához:
<PropertyGroup>
<IsTrimmable>true</IsTrimmable>
</PropertyGroup>
Ez "vághatóként" jelöli meg a szerelvényt, és engedélyezi az adott projektre vonatkozó vágási figyelmeztetéseket. A "vágható" állapot azt jelenti, hogy a szerelvény kompatibilisnek tekinthető a vágással, és a szerelvény létrehozásakor nem lehetnek vágási figyelmeztetések. Ha csökkentett alkalmazásban használják, a szerelvény kihasználatlan elemei el lesznek távolítva a végső kimenetből.
Ha natív AOT-telepítést használ a .NET 9+-ban, a IsAotCompatible
MSBuild tulajdonság beállítása true
a IsTrimmable
tulajdonsághoz is hozzárendel egy true
értéket, és további AOT-elemző buildtulajdonságokat tesz lehetővé. További információ az AOT-elemzőkről: AOT-kompatibilis elemzők. A .NET MAUI natív AOT-telepítéséről szóló további információkért lásd: natív AOT-telepítés.
A(z) IsTrimmable
MSBuild tulajdonság true
-re állítása a projektfájlban beilleszti a AssemblyMetadata
attribútumot az assembly-be.
[assembly: AssemblyMetadata("IsTrimmable", "True")]
Másik lehetőségként hozzáadhatja a AssemblyMetadata
attribútumot a szerelvényhez anélkül, hogy hozzáadta volna a IsTrimmable
MSBuild tulajdonságot a szerelvény projektfájljához.
Jegyzet
Ha a IsTrimmable
MSBuild tulajdonság be van állítva egy szerelvényhez, ez felülbírálja a AssemblyMetadata("IsTrimmable", "True")
attribútumot. Ez lehetővé teszi, hogy a szerelvényt akkor is levágja, ha nem rendelkezik az attribútummal, vagy letiltsa az attribútummal rendelkező szerelvény levágását.
Elemzési figyelmeztetések mellőzése
Ha a vágóegység engedélyezve van, eltávolítja a statikusan nem elérhető IL-t. A dinamikus függőségeket létrehozó tükröződéseket vagy más mintákat használó alkalmazások emiatt megszakadhatnak. Az ilyen mintákra való figyelmeztetéshez, amikor egy szerelvényt vágásbiztosként jelöl meg, a könyvtárszerzőknek a SuppressTrimAnalysisWarnings
MSBuild tulajdonságot false
-re kell állítaniuk.
<PropertyGroup>
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
</PropertyGroup>
A vágáselemzési figyelmeztetések el nem nyomása figyelmeztetéseket fog eredményezni az egész alkalmazásra vonatkozóan, beleértve a saját kódját, a könyvtári kódot és az SDK-kódot.
Részletes figyelmeztetések megjelenítése
A metszéselemzés legfeljebb egy figyelmeztetést eredményez minden olyan összeállításhoz, amely egy PackageReference
származik, ami azt jelzi, hogy az összeállítás belső elemei nem kompatibilisek a metszéssel. Kódtár-szerzőként, ha egy szerelvényt vágásbiztosként jelöl meg, az TrimmerSingleWarn
MSBuild tulajdonság false
beállításával engedélyezheti az egyes szerelvényekre vonatkozó figyelmeztetéseket:
<PropertyGroup>
<TrimmerSingleWarn>false</TrimmerSingleWarn>
</PropertyGroup>
Ez a beállítás az összes részletes figyelmeztetést megjeleníti ahelyett, hogy szerelvényenként egyetlen figyelmeztetésre összecsukja őket.