Přehled sdílení kódu
Tento dokument porovnává různé metody sdílení kódu mezi projekty napříč platformami: .NET Standard, sdílené projekty a přenosné knihovny tříd, včetně výhod a nevýhod každého z nich.
Existují tři metody sdílení kódu mezi multiplatformními aplikacemi:
- Knihovny .NET Standard – projekty .NET Standard můžou implementovat kód, který se má sdílet napříč několika platformami, a může přistupovat k velkému počtu rozhraní API .NET (v závislosti na verzi). .NET Standard 1.0 – 1.6 implementují postupně větší sady rozhraní API, zatímco .NET Standard 2.0 poskytuje nejlepší pokrytí seznamu .NET BCL (včetně rozhraní .NET API dostupných v aplikacích Xamarin).
- Sdílené projekty – K uspořádání zdrojového kódu použijte typ projektu sdíleného assetu a direktivy kompilátoru použijte
#if
podle potřeby ke správě požadavků specifických pro platformu. - Přenosné knihovny tříd (zastaralé) – Přenosné knihovny tříd (PCLs) můžou cílit na více platforem se společným povrchem rozhraní API a pomocí rozhraní poskytují funkce specifické pro platformu. Seznamy PCLS jsou zastaralé v nejnovějších verzích sady Visual Studio – místo toho použijte .NET Standard.
Cílem strategie sdílení kódu je podporovat architekturu zobrazenou v tomto diagramu, kde může být jeden základ kódu využíván více platformami.
Tento článek porovnává dostupné metody, které vám pomůžou zvolit správný typ projektu pro vaše aplikace.
Standardní knihovny .NET
Knihovny .NET Standard poskytují dobře definovanou sadu knihoven základních tříd, na které lze odkazovat v různých typech projektů, včetně projektů pro různé platformy, jako jsou Xamarin.Android a Xamarin.iOS. Pro maximální kompatibilitu s existujícím kódem rozhraní .NET Framework se doporučuje .NET Standard 2.0.
Zaměstnanecké výhody
- Umožňuje sdílet kód napříč více projekty.
- Operace refaktoringu vždy aktualizují všechny ovlivněné odkazy.
- Větší povrch knihovny základních tříd .NET (BCL) je k dispozici než profily PCL. Konkrétně má .NET Standard 2.0 téměř stejnou plochu rozhraní API jako rozhraní .NET Framework a doporučuje se pro nové aplikace a portování stávajících seznamů PCLs.
Nevýhody
- Nelze použít direktivy kompilátoru, jako
#if __IOS__
je .
Poznámky
.NET Standard se podobá PCL, ale s jednodušším modelem pro podporu platformy a větším počtem tříd z seznamu BCL.
Sdílené projekty
Sdílené projekty obsahují soubory kódu a prostředky, které jsou zahrnuté v jakémkoli projektu, který je odkazuje. Sdílené projekty nevytvářejí kompilovaný výstup samy o sobě.
Tento snímek obrazovky ukazuje soubor řešení obsahující tři projekty aplikací (pro Android, iOS a Windows) se sdíleným projektem, který obsahuje běžné soubory zdrojového kódu jazyka C#:
Koncepční architektura je znázorněná v následujícím diagramu, kde každý projekt zahrnuje všechny sdílené zdrojové soubory:
Příklad
Multiplatformní aplikace, která podporuje iOS, Android a Windows, by vyžadovala projekt aplikací pro každou platformu. Společný kód se nachází ve sdíleném projektu.
Ukázkové řešení by obsahovalo následující složky a projekty (názvy projektů byly vybrány pro vyjádření, vaše projekty nemusí dodržovat tyto pokyny pro pojmenování):
- Sdílený – sdílený projekt obsahující kód společný pro všechny projekty.
- AppAndroid – projekt aplikace Xamarin.Android.
- AppiOS – projekt aplikace Xamarin.iOS.
- AppWindows – projekt aplikace pro Windows.
Tímto způsobem tři projekty aplikací sdílejí stejný zdrojový kód (soubory C# ve sdíleném souboru). Všechny úpravy sdíleného kódu se budou sdílet ve všech třech projektech.
Zaměstnanecké výhody
- Umožňuje sdílet kód napříč více projekty.
- Sdílený kód lze rozvětvovat na základě platformy pomocí direktiv kompilátoru (např. pomocí
#if __ANDROID__
, jak je popsáno v dokumentu o vytváření multiplatformních aplikací ). - Projekty aplikací můžou zahrnovat odkazy specifické pro platformu, které může sdílený kód využívat (například použití
Community.CsharpSqlite.WP7
v ukázce Tasky pro windows Telefon).
Nevýhody
- Refaktoringy, které ovlivňují kód uvnitř neaktivních direktiv kompilátoru, nebudou aktualizovat kód uvnitř těchto direktiv.
- Na rozdíl od většiny ostatních typů projektů nemá sdílený projekt žádné sestavení output. Během kompilace se soubory považují za součást odkazujícího projektu a zkompilují se do tohoto sestavení. Pokud chcete kód sdílet jako sestavení, je lepším řešením .NET Standard nebo Portable Class Libraries.
Poznámky
Vhodné řešení pro vývojáře aplikací, kteří píší kód, který je určený jenom ke sdílení ve své aplikaci (a ne k distribuci jiným vývojářům).
Přenosné knihovny tříd
Tip
Knihovny .NET Standard 2.0 se doporučují pro přenosné knihovny tříd.
Přenosné knihovny tříd jsou zde podrobně popsány.
Zaměstnanecké výhody
- Umožňuje sdílet kód napříč více projekty.
- Operace refaktoringu vždy aktualizují všechny ovlivněné odkazy.
Nevýhody
- Doporučuje se místo toho zastaralé v nejnovějších verzích sady Visual Studio, knihovny .NET Standard. Projděte si toto vysvětlení rozdílů mezi PCL a .NET Standard.
- Nelze použít direktivy kompilátoru.
- K dispozici je pouze podmnožina rozhraní .NET Framework určená vybraným profilem (další informace najdete v úvodu do PCL ).
Poznámky
Šablona PCL je považována za za zastaralou v nejnovějších verzích sady Visual Studio.
Shrnutí
Vámi zvolená strategie sdílení kódu bude řízena platformami, na které cílíte. Zvolte metodu, která nejlépe vyhovuje vašemu projektu.
.NET Standard je nejlepší volbou pro vytváření knihoven kódu s možností shod (zejména publikování na NuGetu). Sdílené projekty dobře fungují pro vývojáře aplikací, kteří plánují ve svých multiplatformních aplikacích používat spoustu funkcí specifických pro konkrétní platformu.
I když projekty PCL v sadě Visual Studio nadále podporují, doporučuje se pro nové projekty .NET Standard.