2016-01-05 20 views
11

Come si impacchetta una libreria di piattaforma Windows universale in un modo moderno e generico per la pubblicazione tramite NuGet? Supponiamo di avere un singolo assembly AnyCPU scritto in C# che esporta alcuni codici e controlli utente XAML.Come impacchettare una libreria .NET destinata alla Universal Windows Platform?

Si tratta di una serie di domande e risposte che documentano le mie scoperte sul tema del pacchetto di authoring moderna NuGet, concentrandosi in particolare sulle modifiche introdotte con NuGet 3. Si può anche essere interessati a alcune domande correlate:

risposta

11

Questa risposta costruisce sulla principles used to package libraries targeting the .NET Framework. Leggi prima la risposta collegata per capire meglio quanto segue.

Per prima cosa è necessario selezionare la casella di controllo "Genera layout libreria" nelle impostazioni di creazione del progetto. Senza questo, non sarà possibile utilizzare i controlli utente XAML esportati dalla libreria. Assicurati di applicare questa impostazione per tutte le configurazioni e le architetture di build.

Oltre ai fondamentali 3 attivi (vedi risposta linkato sopra), sarà anche necessario per confezionare le seguenti attività aggiuntive dalla directory di output di generazione:

  • MyUwpLibrary.pri
  • sottodirectory MyUwpLibrary

Queste risorse aggiuntive sono necessarie per utilizzare i controlli utente XAML esportati dall'assieme. Includere sempre queste risorse, anche se non si è ancora esportato alcun XAML dalla libreria: è possibile farlo un giorno e questo sarà difficile da ricordare in seguito!

Per pubblicare la libreria UWP, è necessario creare un pacchetto NuGet con la seguente struttura:

\---lib 
    \---uap10.0 
     | MyUwpLibrary.dll 
     | MyUwpLibrary.pdb 
     | MyUwpLibrary.pri 
     | MyUwpLibrary.xml 
     | 
     \---MyUwpLibrary 
       HelloWorld.xaml 
       MyUwpLibrary.xr.xml 

Se si ha familiarità con la pubblicazione libreria .NET Framework, questo ha l'aria molto familiare e diretto. È possibile utilizzare il seguente modello per il file nuspec:

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
    <metadata minClientVersion="3.2"> 
     <id>Example.MyUwpLibrary</id> 
     <version>1.0.0</version> 
     <authors>Firstname Lastname</authors> 
     <description>Example of a UWP library that exports a user control.</description> 
     <dependencies> 
      <dependency id="Newtonsoft.Json" version="8.0.1" /> 
     </dependencies> 
    </metadata> 
    <files> 
     <!-- The double wildcard will also grab all the resource files and the resource subdirectory. --> 
     <file src="..\bin\Release\MyUwpLibrary**" target="lib\uap10.0" /> 
    </files> 
</package> 

Questo è tutto, davvero! Ricordarsi di creare la soluzione utilizzando la configurazione di rilascio prima di creare il pacchetto NuGet. Per ulteriori dettagli, fare riferimento alla risposta sulla creazione di una libreria .NET Framework, collegata in precedenza.

Una libreria di esempio e i relativi file di imballaggio sono available on GitHub. La soluzione corrispondente a questa risposta è SimpleUwpLibrary.

+0

Grazie sinceramente per questo! Stavo incontrando dei problemi nel creare la mia libreria UWP e penso che questo abbia risolto i problemi per me. –

+0

Inoltre: un TFM diverso che potrebbe essere usato (invece di 'uap10.0') è' netcore50'. –

+0

La sottodirectory MyUwpLibrary viene creata solo se il flag GenerateLibraryLayout è impostato su true per la configurazione di build corrispondente. – halllo