Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Při zahájení procesu přenosu máte dvě možnosti. Jedním z nich je úprava kopie existujících souborů projektu, včetně manifestu balíčku aplikace (pro tuto možnost najdete informace o aktualizaci souborů projektu v Migrovat aplikace na univerzální platformu Windows (UPW)). Druhou možností je vytvořit nový projekt Windows 10 v sadě Visual Studio a zkopírovat do něj soubory. První část tohoto tématu popisuje druhou možnost, ale zbytek tématu obsahuje další informace použitelné pro obě možnosti. Můžete také zvolit, že nový projekt Windows 10 zůstane ve stejném řešení jako u stávajících projektů a budete sdílet soubory zdrojového kódu pomocí sdíleného projektu. Nebo můžete nový projekt ponechat ve vlastním řešení a sdílet soubory zdrojového kódu pomocí funkce propojených souborů v sadě Visual Studio.
Vytvoření projektu a zkopírování souborů do projektu
Tyto kroky se zaměřují na možnost vytvoření nového projektu Windows 10 v sadě Visual Studio a zkopírování souborů do něj. Některé podrobnosti týkající se toho, kolik projektů vytvoříte a které soubory kopírujete, budou záviset na faktorech a rozhodnutích popsaných v Pokud máte aplikaci Universal 8.1 a oddíly, které ji následují. Tyto kroky předpokládají nejjednodušší případ.
- Spusťte Microsoft Visual Studio 2015 a vytvořte nový projekt Prázdná aplikace (Windows Universal). Další informace viz Rychlé zahájení aplikace Windows Runtime 8.x pomocí šablon (C#, C++, Visual Basic). Váš nový projekt vytvoří balíček aplikace (soubor appx), který se spustí ve všech rodinách zařízení.
- V projektu aplikace Universal 8.1 identifikujte všechny soubory zdrojového kódu a soubory vizuálních prostředků, které chcete znovu použít. Pomocí Průzkumníka souborů zkopírujte datové modely, zobrazte modely, vizuální prostředky, slovníky prostředků, strukturu složek a cokoli jiného, co chcete znovu použít, do nového projektu. Podle potřeby zkopírujte nebo vytvořte na disku podsložky.
- Zkopírujte také zobrazení (například MainPage.xaml a MainPage.xaml.cs) do nového projektu. Opět podle potřeby vytvořte nové podsložky a odeberte existující zobrazení z projektu. Než ale přepíšete nebo odeberete zobrazení, které sada Visual Studio vygenerovala, uložte kopii, protože může být užitečné ji později odkazovat. První fáze přenosu aplikace Universal 8.1 se zaměřuje na to, aby vypadala dobře a dobře fungovala na jedné řadě zařízení. Později se zaměříte na to, abyste se ujistili, že se zobrazení dobře přizpůsobí všem formátům, a případně přidáte adaptivní kód, abyste co nejlépe využili konkrétní řadu zařízení.
- V Průzkumníku řešeníse ujistěte, že je přepnuta možnost Zobrazit všechny soubory. Vyberte soubory, které jste zkopírovali, klikněte na ně pravým tlačítkem myši a klikněte na Zahrnout do projektu. Tím se automaticky zahrnou jejich obsahující složky. Pokud si přejete, můžete Zobrazit všechny soubory vypnout. Alternativním pracovním postupem, pokud chcete, je použít příkaz Přidat existující položku poté, co vytvoříte všechny nezbytné podsložky v Průzkumníku řešení Visual Studio . Pečlivě zkontrolujte, zda vaše vizuální prostředky mají akci sestavení nastavenou na obsah a kopírování do výstupního adresáře nastavené na Nekopírovat.
- V této fázi pravděpodobně uvidíte některé chyby sestavení. Pokud ale víte, co potřebujete změnit, můžete pomocí příkazu Najít a nahradit sady Visual Studio provádět hromadné změny zdrojového kódu. a v imperativním editoru kódu v sadě Visual Studio použijte příkazy Vyřešit a Uspořádat pomocí příkazů v místní nabídce pro cílenější změny.
Maximalizace využití značkování a kódu
Zjistíte, že mírný refaktoring a/nebo přidání adaptivního kódu (který je vysvětlen níže) vám umožní maximalizovat značkování a kód, který funguje ve všech rodinách zařízení. Tady jsou další podrobnosti.
- Soubory, které jsou společné pro všechny rodiny zařízení, nepotřebují zvláštní pozornost. Tyto soubory bude aplikace používat ve všech rodinách zařízení, na kterých běží. To zahrnuje soubory značek XAML, imperativní soubory zdrojového kódu a datové soubory.
- Aplikace může zjistit rodinu zařízení, na které běží, a přejít do zobrazení navrženého speciálně pro danou řadu zařízení. Další podrobnosti najdete v tématu Zjištění platformy, na které aplikace běží.
- Podobný postup, který může být užitečný, pokud neexistuje žádná alternativa, je dát souboru se značkami nebo ResourceDictionary souboru (nebo složce, která soubor obsahuje) speciální název tak, aby se automaticky načítal za běhu pouze tehdy, když vaše aplikace běží na konkrétní rodině zařízení. Tato technika je znázorněna v Bookstore1 případové studii.
- Pokud potřebujete podporovat Windows 10, měli byste být schopni odebrat spoustu direktiv podmíněné kompilace ve zdrojovém kódu aplikace Universal 8.1. Podívejte se na Podmíněnou kompilaci a adaptivní kód v této kapitole.
- Pokud chcete používat funkce, které nejsou dostupné ve všech rodinách zařízení (například tiskárny, skenery nebo tlačítko fotoaparátu), můžete napsat adaptivní kód. Podívejte se na třetí příklad v tématu Podmíněná kompilace a adaptivní kód.
- Pokud chcete podporovat Windows 8.1, Windows Phone 8.1 a Windows 10, můžete mít tři projekty ve stejném řešení a sdílet kód se sdíleným projektem. Alternativně můžete sdílet soubory zdrojového kódu mezi projekty. Následujte tento postup: V sadě Visual Studio klikněte pravým tlačítkem myši na projekt v Průzkumníku řešení, vyberte Přidat existující položku, označte soubory pro sdílení, a potom klikněte na Přidat jako odkaz. Ukládejte soubory zdrojového kódu do společné složky v systému souborů, kde je uvidí projekty, které je propojí. A nezapomeňte je přidat do správy zdrojového kódu.
- Informace o opětovném použití na binární úrovni, nikoli na úrovni zdrojového kódu, najdete v tématu Vytváření komponent prostředí Windows Runtime v jazyce C# a Visual Basic. K dispozici jsou také přenosné knihovny tříd, které podporují podmnožinu rozhraní .NET API, která jsou k dispozici v rozhraní .NET Framework pro Windows 8.1, Windows Phone 8.1 a aplikace pro Windows 10 (.NET Core) a úplné rozhraní .NET Framework. Sestavení knihovny přenosných tříd jsou binární kompatibilní se všemi těmito platformami. Pomocí sady Visual Studio vytvořte projekt, který cílí na knihovnu přenosných tříd. Podívejte se na vývoj pro různé platformy pomocí knihovny přenosných tříd.
Rozšiřující sady SDK
Většina rozhraní API prostředí Windows Runtime, která vaše aplikace Universal 8.1 už volá, se implementují v sadě rozhraní API označovaných jako univerzální řada zařízení. Některé se ale implementují v sadách SDK rozšíření a Sada Visual Studio rozpozná pouze rozhraní API implementovaná sadou cílových zařízení vaší aplikace nebo všemi sadami SDK rozšíření, na které jste odkazovali.
Pokud se zobrazí chyby kompilace týkající se oborů názvů nebo typů nebo členů, které se nepodařilo najít, pravděpodobně to bude příčinou. Otevřete téma rozhraní API v referenční dokumentaci k rozhraní API a přejděte do části Požadavky: dozvíte se, co je implementační řada zařízení. Pokud se nejedná o vaši cílovou řadu zařízení, abyste zpřístupnili rozhraní API ve vašem projektu, budete potřebovat odkaz na sadu SDK rozšíření pro tuto řadu zařízení.
Klikněte na Project>Add Reference>Windows Universal>Extensions a vyberte příslušnou sadu SDK rozšíření. Pokud jsou například rozhraní API, která chcete volat, dostupná pouze v rodině mobilních zařízení a byla zavedena ve verzi 10.0.x.y, pak vyberte Windows Mobile Extensions pro UWP.
Tím se do souboru projektu přidá následující odkaz:
<ItemGroup>
<SDKReference Include="WindowsMobile, Version=10.0.x.y">
<Name>Windows Mobile Extensions for the UWP</Name>
</SDKReference>
</ItemGroup>
Název a číslo verze odpovídají složkám v nainstalovaném umístění sady SDK. Například výše uvedené informace odpovídají tomuto názvu složky:
\Program Files (x86)\Windows Kits\10\Extension SDKs\WindowsMobile\10.0.x.y
Pokud vaše aplikace necílí na rodinu zařízení, která implementuje rozhraní API, budete muset použít třídu ApiInformation ke kontrole dostupnosti tohoto rozhraní API před jeho voláním (tomu se říká adaptivní kód). Tato podmínka se pak vyhodnotí všude, kde vaše aplikace běží, ale bude se hodnotit jako pravdivá pouze na zařízeních, kde je rozhraní API přítomno a tudíž dostupné pro volání. Po první kontrole, jestli existuje univerzální rozhraní API, používejte pouze sady SDK rozšíření a adaptivní kód. V následující části jsou uvedeny některé příklady.
Podívejte se také na manifest balíčku aplikace.
Podmíněná kompilace a adaptivní kód
Pokud používáte podmíněnou kompilaci (s direktivami preprocesoru jazyka C#), aby soubory kódu fungovaly ve Windows 8.1 i Windows Phone 8.1, můžete teď zkontrolovat tuto podmíněnou kompilaci s ohledem na konvergenci provedenou ve Windows 10. Konvergence znamená, že v aplikaci pro Windows 10 je možné úplně odebrat některé podmínky. Ostatní se mění na běhové kontroly, jak je znázorněno v následujících příkladech.
Poznámka Pokud chcete podporovat Windows 8.1, Windows Phone 8.1 a Windows 10 v jednom souboru kódu, můžete to udělat také. Pokud se podíváte do projektu Windows 10 na stránkách vlastností projektu, uvidíte, že projekt definuje WINDOWS_UAP jako symbol podmíněné kompilace. Můžete ho tedy použít v kombinaci s WINDOWS_APP a WINDOWS_PHONE_APP. Tyto příklady ukazují jednodušší případ odebrání podmíněné kompilace z aplikace Universal 8.1 a nahrazení ekvivalentního kódu pro aplikaci pro Windows 10.
Tento první příklad ukazuje způsob použití pro rozhraní API PickSingleFileAsync (které platí jenom pro Windows 8.1) a PickSingleFileAndContinue API (které platí jenom pro Windows Phone 8.1).
#if WINDOWS_APP
// Use Windows.Storage.Pickers.FileOpenPicker.PickSingleFileAsync
#else
// Use Windows.Storage.Pickers.FileOpenPicker.PickSingleFileAndContinue
#endif // WINDOWS_APP
Windows 10 konverguje na rozhraní API PickSingleFileAsync, takže váš kód to zjednodušuje:
// Use Windows.Storage.Pickers.FileOpenPicker.PickSingleFileAsync
V tomto příkladu zpracováváme hardwarové tlačítko zpět – ale jenom na platformě Windows Phone.
#if WINDOWS_PHONE_APP
Windows.Phone.UI.Input.HardwareButtons.BackPressed += this.HardwareButtons_BackPressed;
#endif // WINDOWS_PHONE_APP
...
#if WINDOWS_PHONE_APP
void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
// Handle the event.
}
#endif // WINDOWS_PHONE_APP
Ve Windows 10 je událost stisknutí tlačítka Zpět univerzální koncept. Tlačítka zpět implementovaná v hardwaru nebo softwaru vyvolají událost BackRequested, takže je to ta, kterou je třeba zpracovat.
Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested +=
this.ViewModelLocator_BackRequested;
...
private void ViewModelLocator_BackRequested(object sender, Windows.UI.Core.BackRequestedEventArgs e)
{
// Handle the event.
}
Tento poslední příklad je podobný předchozímu příkladu. Tady zpracováváme tlačítko hardwarové kamery , ale znovu, pouze v kódu zkompilovaném do balíčku aplikace Pro Windows Phone.
#if WINDOWS_PHONE_APP
Windows.Phone.UI.Input.HardwareButtons.CameraPressed += this.HardwareButtons_CameraPressed;
#endif // WINDOWS_PHONE_APP
...
#if WINDOWS_PHONE_APP
void HardwareButtons_CameraPressed(object sender, Windows.Phone.UI.Input.CameraEventArgs e)
{
// Handle the event.
}
#endif // WINDOWS_PHONE_APP
Ve Windows 10 je tlačítko hardwarové kamery konceptem, který je konkrétní pro řadu mobilních zařízení. Vzhledem k tomu, že na všech zařízeních bude spuštěn jeden balíček aplikace, změníme podmínku kompilace na podmínku za běhu pomocí toho, co se označuje jako adaptivní kód. K tomu použijeme třídu ApiInformation, abychom za běhu zjistili přítomnost třídy HardwareButtons. HardwareButtons je definována v sadě SDK pro mobilní rozšíření, takže budeme muset do našeho projektu přidat odkaz na tuto sadu SDK, aby se tento kód zkompiloval. Upozorňujeme ale, že obslužná rutina se spustí jenom na zařízení, které implementuje typy definované v sadě SDK pro mobilní rozšíření, a to je řada mobilních zařízení. Tento kód je tedy morálně ekvivalentní univerzálnímu kódu 8.1 v tom, že je opatrní pouze používat funkce, které jsou přítomné, i když toho dosahuje jiným způsobem.
// Note: Cache the value instead of querying it more than once.
bool isHardwareButtonsAPIPresent = Windows.Foundation.Metadata.ApiInformation.IsTypePresent
("Windows.Phone.UI.Input.HardwareButtons");
if (isHardwareButtonsAPIPresent)
{
Windows.Phone.UI.Input.HardwareButtons.CameraPressed +=
this.HardwareButtons_CameraPressed;
}
...
private void HardwareButtons_CameraPressed(object sender, Windows.Phone.UI.Input.CameraEventArgs e)
{
// Handle the event.
}
Viz také Zjištění platformy, na které vaše aplikace běží.
Manifest balíčku aplikace
Téma Co se změnilo ve Windows 10 obsahuje změny odkazu na schéma manifestu balíčku pro Windows 10, včetně prvků, které byly přidány, odebrány a změněny. Referenční informace o všech prvcích, atributech a typech ve schématu najdete v tématu hierarchii elementů. Pokud portujete aplikaci pro Windows Phone Store nebo pokud se jedná o aktualizaci aplikace z Windows Phone Storu, ujistěte se, že mp:PhoneIdentity element odpovídá tomu, co je v manifestu aplikace předchozí aplikace (použijte stejné identifikátory GUID přiřazené k aplikaci storem). Tím zajistíte, že uživatelé vaší aplikace, kteří upgradují na Windows 10 nebo Windows 11, dostanou vaši novou aplikaci jako aktualizaci, ne jako duplicitní. Další podrobnosti najdete v referenčním tématu mp:PhoneIdentity.
Nastavení v projektu (včetně odkazů na sady SDK rozšíření) určují oblast rozhraní API, kterou může vaše aplikace volat. Manifest balíčku aplikace je ale tím, co určuje skutečnou sadu zařízení, do které si vaši zákazníci můžou aplikaci nainstalovat ze Storu. Další informace najdete v příkladech v TargetDeviceFamily.
Manifest balíčku aplikace můžete upravit tak, aby nastavil různé deklarace, možnosti a další nastavení, která některé funkce potřebují. Editor manifestu balíčku aplikace Visual Studio můžete použít k jeho úpravě. Pokud se Průzkumník řešení nezobrazí, zvolte ho v nabídce Zobrazit. Poklikejte na Package.appxmanifest. Tím se otevře okno editoru manifestu. Vyberte příslušnou kartu k provedení změn a poté je uložte.
Další téma je řešení potíží.