2016-01-05 15 views
11

Jak spakować bibliotekę Uniwersalnej platformy Windows w nowoczesny, uniwersalny sposób do publikacji za pośrednictwem NuGet? Załóżmy, że mam pojedynczy zestaw AnyCPU napisany w języku C#, który eksportuje niektóre elementy sterujące kodu i XAML.Jak spakować bibliotekę .NET kierowaną na uniwersalną platformę Windows?

Jest to seria pytań i odpowiedzi, które dokumentują moje wnioski na temat nowoczesnego pakietu Nuget authoringu, koncentrując się przede wszystkim na zmianach wprowadzonych Nuget 3. Możesz być także zainteresowany w niektórych pokrewnych pytania:

Odpowiedz

11

Ta odpowiedź opiera się na principles used to package libraries targeting the .NET Framework. Przeczytaj połączoną odpowiedź, aby lepiej zrozumieć następujące kwestie.

Najpierw należy zaznaczyć pole wyboru "Generuj układ biblioteki" w ustawieniach budowania projektu. Bez tego nie będzie możliwe użycie formantów użytkownika XAML wyeksportowanych przez bibliotekę. Pamiętaj, aby zastosować to ustawienie dla wszystkich konfiguracji i architektur kompilacji.

Oprócz podstawowych aktywów 3 (patrz odpowiedź powiązany powyżej), będzie trzeba także pakować następujące dodatkowe aktywa z budowania katalogu wyjściowego:

  • MyUwpLibrary.pri
  • podkatalogu MyUwpLibrary

Te dodatkowe zasoby są wymagane do korzystania z formantów użytkownika XAML eksportowanych przez zespół. Zawsze włączaj te zasoby, nawet jeśli nie eksportujesz jeszcze żadnego XAML-a z biblioteki - możesz to zrobić pewnego dnia i będzie to trudne do zapamiętania w przyszłości!

Aby opublikować bibliotekę UWP, trzeba utworzyć pakiet Nuget o następującej strukturze:

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

Jeśli jesteś zaznajomiony z publikacji biblioteki .NET Framework, powinno to wyglądać dość znane i jednoznaczne. Możesz użyć następującego szablonu do pliku 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> 

To wszystko, naprawdę! Pamiętaj, aby zbudować swoje rozwiązanie przy użyciu konfiguracji Release przed utworzeniem pakietu NuGet. Aby uzyskać więcej informacji, zapoznaj się z odpowiedzią na temat pakowania biblioteki .NET Framework, którą podano powyżej.

Przykładowa biblioteka i odpowiednie pliki opakowań to available on GitHub. Rozwiązaniem odpowiadającym tej odpowiedzi jest SimpleUwpLibrary.

+0

Bardzo dziękuję za to! Wpadłem w kłopoty, tworząc własną bibliotekę UWP i myślę, że rozwiązało to dla mnie problemy. –

+0

Ponadto: inny TFM, który może być użyty (zamiast 'uap10.0') to' netcore50'. –

+0

Podfolder MyUwpLibrary jest tworzony tylko wtedy, gdy flaga GenerateLibraryLayout ma wartość true dla odpowiedniej konfiguracji kompilacji. – halllo