Questa risposta costruisce sulla principles of .NET Framework library packaging e principles of Universal Windows Platform library packaging. Leggi le risposte collegate per capire meglio quanto segue.
Quando si fa riferimento direttamente un Visual Studio SDK estensione in un progetto, il seguente frammento è incluso nel file Csproj:
<SDKReference Include="Microsoft.PlayerFramework.Xaml.UWP, Version=3.0.0.2">
<Name>Microsoft Player Framework</Name>
</SDKReference>
NuGet offre funzionalità che consente un'azione equivalente da eseguire quando si installa un NuGet pacchetto. La prima cosa che devi fare è creare nel tuo progetto un file .targets (ad es. MyLibraryUsingExtensionSdk.targets) che contenga l'XML pertinente da aggiungere al progetto in cui è installata la tua libreria. Dovrai copiare l'elemento <SDKReference>
pertinente dal file .csproj della tua libreria e includere anche eventuali elementi padre, creando un documento XML completo che può essere unito.
<?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>
Imposta l'azione di costruzione di questo file su Nessuno, per evitare che venga inutilmente toccata dal processo di creazione.
Includendo questo file .targets nella posizione appropriata nella struttura del pacchetto NuGet, esso verrà automaticamente unito a runtime in progetti che fanno uso della libreria. Si vuole raggiungere la seguente struttura del pacchetto:
+---build
| \---uap10.0
| MyLibraryUsingExtensionSdk.targets
|
\---lib
\---uap10.0
| MyLibraryUsingExtensionSdk.dll
| MyLibraryUsingExtensionSdk.pdb
| MyLibraryUsingExtensionSdk.pri
| MyLibraryUsingExtensionSdk.XML
|
\---MyLibraryUsingExtensionSdk
ExampleControl.xaml
MyLibraryUsingExtensionSdk.xr.xml
È possibile creare un tale pacchetto utilizzando il seguente modello .nuspec:
<?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>
noti che Visual Studio richiederà una ricarica soluzione per riconoscere pienamente l'estensione SDK dopo l'installazione di un pacchetto NuGet. Le build funzioneranno immediatamente senza problemi ma IntelliSense non rileverà la nuova estensione SDK fino a quando non verrà ricaricata.
Sfortunatamente, questo approccio richiede di eseguire l'hardcode del numero di versione dell'SDK dell'estensione, che può essere problematico. Al momento della scrittura, non conosco alcun modo per specificare un intervallo di versioni o un riferimento indipendente dalla versione.
Ricordarsi di creare la soluzione utilizzando la configurazione di rilascio prima di creare il pacchetto NuGet.
Una libreria di esempio e i relativi file di imballaggio sono available on GitHub. La soluzione corrispondente a questa risposta è UwpLibraryDependingOnExtensionSdks.
nota a margine: le coppie di domande/risposte sono state notate e causate [questa meta domanda] (http://meta.stackoverflow.com/questions/314088/posting-series-questions-and-answering-them-yourself) – rene