Diese Antwort baut auf die principles of .NET Framework library packaging und die principles of Universal Windows Platform library packaging. Lesen Sie zuerst die verknüpften Antworten, um das Folgende besser zu verstehen.
Wenn Sie direkt einen Visual Studio-Erweiterung SDK in einem Projekt, das folgende Snippet Referenz in der CSPROJ-Datei enthalten:
<SDKReference Include="Microsoft.PlayerFramework.Xaml.UWP, Version=3.0.0.2">
<Name>Microsoft Player Framework</Name>
</SDKReference>
NuGet bietet Funktionalität, die eine äquivalente Wirkung ermöglicht durchgeführt werden, wenn ein NuGet Installation Paket. Als Erstes müssen Sie in Ihrem Projekt eine .targets-Datei erstellen (z. B. MyLibraryUsingExtensionSdk.targets), die die relevante XML-Datei enthält, die dem Projekt hinzugefügt werden soll, in dem Ihre Bibliothek installiert ist. Sie möchten das relevante Element <SDKReference>
aus der .csproj-Datei Ihrer Bibliothek kopieren und auch alle übergeordneten Elemente einschließen, um ein vollständiges XML-Dokument zu erstellen, das zusammengeführt werden kann.
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<SDKReference Include="Microsoft.PlayerFramework.Xaml.UWP, Version=3.0.0.2">
<Name>Microsoft Player Framework</Name>
</SDKReference>
</ItemGroup>
</Project>
Legen Sie die Build-Aktion dieser Datei auf None fest, um zu vermeiden, dass sie vom Buildprozess unnötig berührt wird.
Wenn Sie diese .targets-Datei an der entsprechenden Position in der NuGet-Paketstruktur einschließen, wird sie automatisch zur Laufzeit in Projekten zusammengeführt, die Ihre Bibliothek verwenden. Sie möchten die folgende Paketstruktur erreichen:
+---build
| \---uap10.0
| MyLibraryUsingExtensionSdk.targets
|
\---lib
\---uap10.0
| MyLibraryUsingExtensionSdk.dll
| MyLibraryUsingExtensionSdk.pdb
| MyLibraryUsingExtensionSdk.pri
| MyLibraryUsingExtensionSdk.XML
|
\---MyLibraryUsingExtensionSdk
ExampleControl.xaml
MyLibraryUsingExtensionSdk.xr.xml
Sie erstellen ein solches Paket die folgenden .nuspec Vorlage kann:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.2">
<id>Example.MyLibraryUsingExtensionSdk</id>
<version>1.0.0</version>
<authors>Firstname Lastname</authors>
<description>Example of a simple UWP library that depends on an extension SDK.</description>
</metadata>
<files>
<!-- Causes referencing this NuGet package to also automatically reference the relevant extension SDKs. -->
<file src="MyLibraryUsingExtensionSdk.targets" target="build\uap10.0\MyLibraryUsingExtensionSdk.targets" />
<file src="..\bin\Release\MyLibraryUsingExtensionSdk**" target="lib\uap10.0" />
</files>
</package>
Beachten Sie, dass Visual Studio eine Lösung Reload benötigen vollständig um die Erweiterung zu erkennen SDK nach der Installation eines solchen NuGet-Pakets. Builds funktionieren sofort ohne Probleme, aber IntelliSense wird das neue Erweiterungs-SDK erst nach einem erneuten Laden übernehmen.
Leider erfordert dieser Ansatz, dass Sie die Versionsnummer des Extension SDK fest codieren, was problematisch sein kann. Zum Zeitpunkt des Schreibens weiß ich keine Möglichkeit, eine Reihe von Versionen oder eine versionsunabhängige Referenz anzugeben.
Denken Sie daran, Ihre Lösung mit der Release-Konfiguration zu erstellen, bevor Sie das NuGet-Paket erstellen.
Eine Beispielbibliothek und die relevanten Verpackungsdateien sind available on GitHub. Die Lösung, die dieser Antwort entspricht, ist UwpLibraryDependingOnExtensionSdks.
Randnotiz: Ihre Frage/Antwort-Paare wurden bemerkt und verursacht [diese Meta-Frage] (http://meta.stackoverflow.com/questions/314088/posting-series-questions-and-answering-them-yourself) – rene