Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Visual Studio-Projekt- und Elementvorlagen müssen häufig sicherstellen, dass bestimmte Pakete beim Erstellen eines Projekts oder Elements installiert werden. Beispielsweise installiert die ASP.NET MVC 3-Vorlage jQuery, Modernizr und andere Pakete.
Um dies zu unterstützen, können Vorlagenautoren NuGet anweisen, die erforderlichen Pakete anstelle einzelner Bibliotheken zu installieren. Entwickler können diese Pakete dann jederzeit problemlos aktualisieren.
Weitere Informationen zum Erstellen von Vorlagen selbst finden Sie unter How to: Create Project Templates or Creating Custom Project and Item Templates.
Im restlichen Teil dieses Abschnitts werden die spezifischen Schritte beschrieben, die beim Erstellen einer Vorlage ausgeführt werden müssen, um NuGet-Pakete ordnungsgemäß einzuschließen.
Beispiele
Das Beispiel "Vorinstallierte Pakete" ist im NuGet/Samples-Repository auf GitHub verfügbar.
Hinzufügen von Paketen zu einer Vorlage
Wenn eine Vorlage instanziiert wird, wird ein Vorlagen-Assistent aufgerufen, um die Liste der Zu installierenden Pakete zusammen mit Informationen darüber zu laden, wo diese Pakete gefunden werden sollen. Pakete können in den VSIX eingebettet, in die Vorlage eingebettet oder auf der lokalen Festplatte gespeichert werden. In diesem Fall verwenden Sie einen Registrierungsschlüssel, um auf den Dateipfad zu verweisen. Details zu diesen Standorten werden weiter unten in diesem Abschnitt angegeben.
Vorinstallierte Pakete funktionieren mithilfe von Vorlagen-Assistenten. Ein spezieller Assistent wird aufgerufen, wenn die Vorlage instanziiert wird. Der Assistent lädt die Liste der Pakete, die installiert werden müssen, und übergibt diese Informationen an die entsprechenden NuGet-APIs.
Schritte zum Einschließen von Paketen in eine Vorlage:
Fügen Sie in Ihrer
vstemplateDatei einen Verweis auf den NuGet-Vorlagen-Assistenten hinzu, indem Sie einWizardExtensionElement hinzufügen:<WizardExtension> <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> </WizardExtension>NuGet.VisualStudio.Interop.dllist eine Assembly, die nur dieTemplateWizard-Klasse enthält, die ein einfacher Wrapper ist, der die eigentliche Implementierung inNuGet.VisualStudio.dllaufruft. Die Assemblyversion ändert sich nie, sodass Projekt-/Elementvorlagen weiterhin mit neuen Versionen von NuGet funktionieren.Fügen Sie die Liste der Pakete hinzu, die im Projekt installiert werden sollen:
<WizardData> <packages> <package id="jQuery" version="1.6.2" /> </packages> </WizardData>Der Assistent unterstützt mehrere
<package>Elemente, um mehrere Paketquellen zu unterstützen. Dieid- undversion-Attribute sind erforderlich, was bedeutet, dass eine bestimmte Version eines Pakets installiert wird, auch wenn eine neuere Version verfügbar ist. Dadurch wird verhindert, dass Paketupdates die Vorlage beschädigen, und die Entscheidung, das Paket zu aktualisieren, wird dem Entwickler überlassen, der die Vorlage verwendet.Geben Sie das Repository an, in dem NuGet die Pakete finden kann, wie in den folgenden Abschnitten beschrieben.
VSIX-Paket-Repository
Der empfohlene Bereitstellungsansatz für Visual Studio-Projekt-/Elementvorlagen ist eine VSIX-Erweiterung , da sie es Ihnen ermöglicht, mehrere Projekt-/Elementvorlagen zusammenzupacken und Entwicklern das einfache Auffinden Ihrer Vorlagen mithilfe des VS Extension Managers oder des Visual Studio Gallery zu ermöglichen. Updates für die Erweiterung sind auch einfach bereitzustellen, indem sie den automatischen Updatemechanismus von Visual Studio Extension Manager verwenden.
Der VSIX selbst kann als Quelle für Pakete dienen, die von der Vorlage benötigt werden:
Ändern Sie das
<packages>Element in der.vstemplateDatei wie folgt:<packages repository="extension" repositoryId="MyTemplateContainerExtensionId"> <!-- ... --> </packages>Das
repository-Attribut gibt den Typ des Repositorys an, währendextensionrepositoryIdder eindeutige Bezeichner des VSIX selbst ist (Dies ist der Wert desID-Attributs in dervsixmanifest-Datei der Erweiterung, siehe VSIX Extension Schema 2.0 Reference).Platzieren Sie Ihre
nupkgDateien in einem Ordner mit dem NamenPackagesinnerhalb der VSIX.Fügen Sie die erforderlichen Paketdateien wie
<Asset>in IhrervsixmanifestDatei hinzu (siehe VSIX Extension Schema 2.0 Reference):<Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />Beachten Sie, dass Sie Pakete in demselben VSIX wie Ihre Projektvorlagen bereitstellen können, oder Sie können sie in einem separaten VSIX platzieren, wenn dies für Ihr Szenario sinnvoller ist. Verweisen Sie jedoch nicht auf VSIX, über die Sie keine Kontrolle haben, da Änderungen an dieser Erweiterung Ihre Vorlage unterbrechen können.
Vorlagenpaket-Repository
Wenn Sie nur eine einzelne Projekt-/Elementvorlage verteilen und nicht mehrere Vorlagen zusammen packen müssen, können Sie einen einfacheren, aber eingeschränkteren Ansatz verwenden, der Pakete direkt in der ZIP-Datei der Projekt-/Elementvorlage enthält:
Ändern Sie das
<packages>Element in der.vstemplateDatei wie folgt:<packages repository="template"> <!-- ... --> </packages>Das
repositoryAttribut weist den Werttemplateauf, und dasrepositoryIdAttribut ist nicht erforderlich.Platzieren Sie Pakete im Stammordner der ZIP-Datei der Projekt-/Elementvorlage.
Beachten Sie, dass die Verwendung dieses Ansatzes in einem VSIX, das mehrere Vorlagen enthält, zu unnötigem Ballast führt, wenn ein oder mehrere Pakete den Vorlagen gemeinsam sind. Verwenden Sie in solchen Fällen das VSIX als Repository , wie im vorherigen Abschnitt beschrieben.
Registrierungsspezifischer Ordnerpfad
SDKs, die mit einer MSI installiert sind, können NuGet-Pakete direkt auf dem Computer des Entwicklers installieren. Dies macht sie sofort verfügbar, wenn eine Projekt- oder Elementvorlage verwendet wird, anstatt sie während dieser Zeit extrahieren zu müssen. ASP.NET Vorlagen verwenden diesen Ansatz.
Lassen Sie die MSI-Installationspakete auf dem Computer installieren. Sie können nur die
.nupkgDateien installieren, oder Sie können diese zusammen mit den erweiterten Inhalten installieren, wodurch ein zusätzlicher Schritt gespeichert wird, wenn die Vorlage verwendet wird. Folgen Sie in diesem Fall der Standardordnerstruktur von NuGet, wobei sich die.nupkgDateien im Stammordner befinden, und jedes Paket verfügt dann über einen Unterordner mit dem ID/Version-Paar als Unterordnernamen.Schreiben Sie einen Registrierungsschlüssel, um den Paketspeicherort zu identifizieren:
- Schlüsselspeicherort: Entweder computerweit
HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repositoryoder wenn es sich um installierte Vorlagen und Pakete pro Benutzer handelt, alternativ verwenden SieHKEY_CURRENT_USER\SOFTWARE\NuGet\Repository - Schlüsselname: Verwenden Sie einen Namen, der einzigartig für Sie ist. Beispielsweise verwenden
AspNetMvc4VS11die ASP.NET MVC 4-Vorlagen für VS 2012. - Werte: der vollständige Pfad zum Ordner "Pakete".
- Schlüsselspeicherort: Entweder computerweit
Fügen Sie im
<packages>Element in der.vstemplateDatei das Attributrepository="registry"hinzu, und geben Sie den Namen des RegistrierungsschlüsselskeyNameim Attribut an.Wenn Sie Ihre Pakete vorab entzippt haben, verwenden Sie das
isPreunzipped="true"Attribut.(NuGet 3.2+) Wenn Sie einen Design-Time-Build am Ende der Paketinstallation erzwingen möchten, fügen Sie das
forceDesignTimeBuild="true"Attribut hinzu.Fügen Sie als Optimierung hinzu
skipAssemblyReferences="true", da die Vorlage selbst bereits die erforderlichen Verweise enthält.<packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true"> <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" /> <-- ... --> </packages>
Bewährte Methoden
Deklarieren Sie eine Abhängigkeit von NuGet VSIX, indem Sie einen Verweis darauf in Ihrem VSIX-Manifest hinzufügen:
<Reference Id="NuPackToolsVsix.Microsoft.67e54e40-0ae3-42c5-a949-fddf5739e7a5" MinVersion="1.7.30402.9028"> <Name>NuGet Package Manager</Name> <MoreInfoUrl>http://v4.hkg1.meaqua.org/nuget/</MoreInfoUrl> </Reference> <!-- ... -->Erfordert, dass Projekt-/Elementvorlagen beim Erstellen gespeichert werden, indem sie in die
<PromptForSaveOnCreation>true</PromptForSaveOnCreation>Datei eingeschlossen.vstemplatewerden.Vorlagen enthalten keine
packages.configDatei und keine Verweise oder Inhalte, die beim Installieren von NuGet-Paketen hinzugefügt werden.