Ladění .NET Standard knihoven v UWP

Visual Studio Development WinUI

5 years ago

.NET Standard přinesl novou éru přenositelnosti knihoven mezi jednotlivými implementacemi .NETu a předčil Portable Class Library ve všech směrech. UWP podporuje .NET Standard 2.0 od Fall Creators Update, ale je zde stále malý háček, který může v některých případech omezovat ladění .NET Standard knihoven v UWP.

Problém

Při ladění .NET Standard knihovny v UWP aplikaci může nastat situace, kdy debugger jednoduše začne přeskakovat kód v knihovně a nebude ani zastavovat na vašich breakpointech. Příčinou je fakt, že formát ladících symbolů pro .NET Standard je mírně odlišný od takového, jaký UWP očekává a ve výsledku jej neumí zpracovat. A přestože byl tento problém reportován a vyřešen, zdá se že ne stoprocentně, protože na něj vývojáři nadále narážejí. Naštěstí je možné problém snadno obejít.

Řešení

Ve výchozí podobě používá .NET Standard Portable mód ladících informací. To zvyšuje výkon, ale je v většinou pravým zdrojem problémů při ladění v UWP. Pokud pro vás výchozí nastavení nefunguje, můžete přepnout buď na mód PDB only nebo na Full debugging. To můžete provést dvěma způsoby - buď přímo v projektovém souboru .csproj nebo přes UI Visual Studia.

Nastavení ladících symbolů přes .csproj

Klikněte pravým tlačítkem myši na vaši .NET Standard knihovnu v Solution Exploreru (Alt + W,S) a vyberte Edit ProjectName.csproj… V textové editoru následně přidejte následující mezi tagy <Project>:

<PropertyGroup Condition="'$(Configuration)'=='Debug'">
  <DebugType>pdbonly</DebugType>
</PropertyGroup>

V případě, že již analogická sekce existuje, upravte ji tak, aby používala buď mód pdbonly nebo full.

Nastavení ladících symbolů přes vlastnosti projektu

Klikněte pravým tlačítkem myši na vaši .NET Standard knihovnu v Solution Exploreru (Alt + W,S) a vyberte Properties. Přepněte na záložku Build a klepněte nda tlačítko Advanced.... Dialog vám nabídne rozbalovací nabídku Debug information kde můžete vybrat mód který vám vyhovuje.

Shrnutí

.NET Standard je skvělé řešení pro mnoho problémů, které potkávaly cross-platform vývojáře při tvorbě knihoven cílících na více různých verzí .NETu. V případě UWP je problém s laděním natolik obvyklý, že je skutečně užitečné na něj pamatovat abyste předešli opakovanému zkoumání, kde vězí jádro pudla.