Zehn Highlights in Visual Studio 2012: #3 NuGet Library Package Manager
Die dritte der zehn ausgewählten Funktionen von Visual Studio 2012 in den Bereichen Projektverwaltung und Code-Editoren ist der NuGet Library Package Manager.
- Dr. Holger Schwichtenberg
Zehn Highlights in Visual Studio 2012:
- Portable Class Libraries
- "Add Reference"-Dialog
- NuGet Library Package Manager
- Verbesserter Solution Explorer
- Registerkartenverwaltung der geöffneten Dateien
- Verbesserter Suchen- und Ersetzendialog
- Suche ĂĽber Visual-Studio-Funktionen/-Optionen
- Codeduplikate suchen
- Verbesserungen im Webeditor
- Page Inspector
Microsofts Entwicklungsumgebung Visual Studio bietet in der Version 2012 eine Reihe schöner neuer Funktionen für die .NET-Programmierer. Feature Nr. 3 ist der NuGet Library Package Manager.
NuGet ist eine komfortable Verwaltungsfunktion von Zusatzpaketen für .NET-Projekte. Hier geht es nicht um die Erweiterung der Visual-Studio-Entwicklungsumgebung, sondern um die Installation zusätzlicher Komponenten für .NET-Projekte, die über den Lieferumfang des .NET Framework hinausgehen. Es gibt inzwischen viele hundert solcher Zusatzkomponenten sowohl von Microsoft als auch von Drittanbietern beziehungsweise der Open-Source-Gemeinde.
Klassischerweise lädt man solche Zusatzkomponenten von irgendeiner Website herunter. Man führt eine Setup.exe aus oder entpackt ein ZIP-Paket. Dadurch erhält man eine oder mehrere Assemblies, die man dann im Visual-Studio-Projekt referenziert. Manchmal findet man gerade nach der Ausführung eines Setup-Pakets diese Assemblies gar nicht so leicht auf der eigenen Festplatte. Manchmal muss man zum Funktionieren der Komponente noch Einträge in der Konfigurationsdatei vornehmen. Manchmal muss man vorher erst andere Komponenten hinzufügen, damit eine Komponente funktionieren kann.
Diesen Vorgang vereinfacht NuGet, das es auch schon als Add-on für Visual Studio 2010 gab, das aber nun zur Grundinstallation von Visual Studio gehört und damit sicherlich mehr Aufmerksamkeit erhält. NuGet definiert Pakete, die die für eine Zusatzkomponente benötigten Assemblies und Konfigurationseinstellungen enthalten. Zudem kann ein NuGet-Paket Abhängigkeiten zu anderen Paketen definieren.
Der Dialog „Manage NuGet Packages“ (siehe Abbildung), den man unter Tools | Library Package Manager oder im Kontextmenü eines Projekts im Solution Explorer findet, bietet eine Online-Suche von Zusatzkomponenten. Dabei wird im Standard auf www.nuget.org (mit Webservices https://nuget.org/api/v2/) gesucht. Man kann aber einen eigenen NuGet-Server betreiben und diesen unter Tools | Package Manager | Package Sources in Visual Studio registrieren.
Alternativ zum NuGet-Dialog lässt sich die NuGet-Konsole verwenden. Diese basiert auf der PowerShell und bietet für NuGet das Commandlet "Install-Package". Durch den Parameter -Version kann man eine bestimmte Version einer Zusatzkomponente installieren. Durch den Parameter -IncludePrelease (abgekürzt -pre) kann man erzwingen, dass auch eine eventuell vorhandene Vorabversion (CTP, Alpha, Beta, RC) einer Zusatzkomponente installiert wird.
Die NuGet-Konsole bietet alle Befehle der PowerShell. Deren Möglichkeiten lassen sich mit Get-Command erforschen. Wünscht man mehr Informationen zu den Befehlen? Einfach Get-Help Befehlsname -full eingeben.
Durch die Installation eines NuGet-Pakets werden die benötigten Assemblies dem aktuellen Projekt (oder wahlweise allen Projekten in einer Projektmappe) hinzugefügt. Optional werden die Konfigurationsdateien (app.config oder web.config) geändert. Die Installation des Zusatzpakets "NHibernate" zeigt in obiger Bildschirmabbildung, dass gemäß der im Paket definierten Abhängigkeiten die das Paket "Iesi.Collections" mit installiert wurde.
Ein NuGet-Packet ist eine Datei mit der Dateinamenserweiterung .nupkg. Dahinter verbirgt sich eine ZIP-Datei. Zentraler Punkt in dem Archiv ist eine Datei mit der Dateinamenserweiterung .nuspec, in der Metadaten des Pakets und Abhängigkeiten beschrieben werden (siehe folgende Beispiele). Die installierten Pakete werden im Verzeichnis "Packages" unterhalb des Projektmappenverzeichnisses sowie in zentralen NuGet-Cache im Benutzerprofil (AppData | Local | NuGet | Cache) abgelegt.
Mit den Cache-Verzeichnissen lassen sich auch einmal heruntergeladene NuGet-Pakete installieren, wenn man offline ist (z.B. install-package nHibernate -Source C:\Users\HS\AppData\Local\NuGet\Cache).
Paket-Spezifikation fĂĽr das NuGet-Paket "NHibernate"
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>NHibernate</id>
<version>3.3.1.4000</version>
<authors>NHibernate community, Hibernate community</authors>
<owners>NHibernate community, Hibernate community</owners>
<projectUrl>http://www.nhforge.org</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>NHibernate is a mature, open source object-relational mapper
for the .NET framework. It is actively developed, fully featured and used
in thousands of successful projects.</description>
<summary>NHibernate is a mature, open source object-relational mapper
for the .NET framework. It is actively developed, fully featured and used
in thousands of successful projects.</summary>
<language>en-US</language>
<tags>ORM, DataBase, DAL, ObjectRelationalMapping</tags>
<dependencies>
<dependency id="Iesi.Collections" version="3.2.0.4000" />
</dependencies>
</metadata>
</package>
Paket-Spezifikation fĂĽr das NuGet-Paket "EntityFramework"
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd">
<metadata>
<id>EntityFramework</id>
<version>5.0.0-rc</version>
<authors>Microsoft</authors>
<owners>Microsoft</owners>
<licenseUrl>http://go.microsoft.com/fwlink/?LinkId=248959</licenseUrl>
<projectUrl>http://go.microsoft.com/fwlink/?LinkId=248960</projectUrl>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<description>Entity Framework is Microsoft's recommended data access
technology for new applications.</description>
<summary>Entity Framework is Microsoft's recommended data access technology
for new applications.</summary>
<language>en-US</language>
<frameworkAssemblies>
<frameworkAssembly assemblyName="System.Data.Entity" targetFramework="" />
<frameworkAssembly assemblyName="System.ComponentModel.DataAnnotations"
targetFramework="" />
</frameworkAssemblies>
</metadata>
</package>