{"id":45,"date":"2015-03-06T18:10:50","date_gmt":"2015-03-06T16:10:50","guid":{"rendered":"http:\/\/invidit.de\/blog\/?p=45"},"modified":"2015-07-01T11:39:08","modified_gmt":"2015-07-01T09:39:08","slug":"nuget-im-visual-studio","status":"publish","type":"post","link":"https:\/\/invidit.de\/blog\/nuget-im-visual-studio\/","title":{"rendered":"NuGet im Visual Studio"},"content":{"rendered":"<p>Hallo Spa\u00df-Coder.<\/p>\n<p>Abh\u00e4ngigkeiten zu anderen, fremden Bibliotheken zu verwalten ist ein Graus. Vor allem dann, wenn wir verteilt, also mit mehreren Entwicklern an einer Softwarel\u00f6sung arbeiten. Wie sorgen wir daf\u00fcr, dass alle Entwickler die neue Bibliothek, die wir im Projekt eingebunden haben auch bekommen? Legen wir sie auf dem zentralen Dateisystem ab? Auf einem extra daf\u00fcr eingerichteten FTP-Server? In Dropbox? Oder checken wir die dlls sogar in SVN oder git ein?<\/p>\n<p>Das sind alles m\u00f6gliche Wege, das Problem in den Griff zu bekommen, eine echte L\u00f6sung stellt aber keiner dieser Wege dar. Hier kommt <strong>NuGet<\/strong> ins Spiel. NuGet ist eine Paket-Verwaltung, mit dessen Hilfe Entwickler Bibliotheken durch einfache Konfiguration im Visual Studio zu einem Projekt hinzugef\u00fcgt werden k\u00f6nnen. Gemeinsam genutzte Bibliotheken werden dann, bei Bedarf, zentral aus dem Internet herunterladen. Der Entwickler, der eine Bibliothek zu einem Projekt hinzuf\u00fcgt muss sich also nicht um die Verteilung k\u00fcmmern.<\/p>\n<p>Um NuGet hat sich in den letzten Jahren ein aktives \u00d6kosystem gebildet, das &#8211; vor allem im Open Source Umfeld &#8211; stetig mehr Unterst\u00fctzung findet. So kann nahezu jede bekannte Open Source Bibliothek per NuGet einem Projekt hinzugef\u00fcgt werden. Dabei wird nicht nur f\u00fcr die Verteilung gesorgt, sondern auch sichergestellt, dass genau die richtige Version der Bibliothek verwendet wird; auch f\u00fcr die richtige Version des .Net-Frameworks.<\/p>\n<p>Es spricht also viel daf\u00fcr, NuGet zu verwenden, wenn man Bibliotheken in seinem Projekt verwenden m\u00f6chte. Aber wie funktioniert das Ganze?<\/p>\n<p>M\u00f6chten wir in einem Test-Projekt z.B. die Bibliothek <em>Fluent Assertions<\/em> verwenden, wie im Artikel\u00a0<a title=\"Unit Tests in C# schreiben\" href=\"http:\/\/invidit.de\/blog\/unit-tests-in-c-schreiben\/\">Unit Tests in C# schreiben<\/a> beschrieben, gehen wir folgenderma\u00dfen vor:<\/p>\n<ol>\n<li>Wir w\u00e4hlen im Solution Explorer im Test-Projekt den Punkt &#8222;References&#8220; und w\u00e4hlen aus den Kontext-Men\u00fc den Punkt &#8222;Manage NuGet Packages&#8230;&#8220; aus<br \/>\n<a href=\"http:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-ManagePackages.png\"><img decoding=\"async\" loading=\"lazy\" class=\" size-full wp-image-89 alignnone\" src=\"http:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-ManagePackages.png\" alt=\"NuGet-ManagePackages\" width=\"466\" height=\"281\" srcset=\"https:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-ManagePackages.png 466w, https:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-ManagePackages-300x181.png 300w\" sizes=\"(max-width: 466px) 100vw, 466px\" \/><\/a><\/li>\n<li>Im sich \u00f6ffnenden Dialog suchen wir nach der gew\u00fcnschten Bibliothek (in unserem Fall &#8222;Fluent Assertions&#8220;), in dem wir den Namen in das Suchfeld eingeben.<br \/>\n<a href=\"http:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGetFluentAssertions.png\"><img decoding=\"async\" loading=\"lazy\" class=\" size-full wp-image-53 alignnone\" src=\"http:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGetFluentAssertions.png\" alt=\"Fluent Assertions Bibliothek im NuGet Package Manager\" width=\"669\" height=\"377\" srcset=\"https:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGetFluentAssertions.png 669w, https:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGetFluentAssertions-300x169.png 300w\" sizes=\"(max-width: 669px) 100vw, 669px\" \/><\/a><strong>Wichtig:<\/strong> Um Online zu suchen, muss im linken Bereich auch <em>Online<\/em> ausgew\u00e4hlt sein.<\/li>\n<li>Durch einen Klick auf &#8222;Install&#8220; wird die Bibliothek dem Projekt hinzugef\u00fcgt und auch direkt heruntergeladen, damit wir sie gleich verwenden k\u00f6nnen.<br \/>\n<strong>Hinweis:<\/strong> Dass die Bibliothek durch NuGet verwaltet installiert ist, wird durch ein kleines H\u00e4kchen anstelle des &#8222;Install&#8220;-Buttons angezeigt<\/li>\n<li>Dem Projekt wurden nun zum einen die Verweise (References) hinzugef\u00fcgt. Dar\u00fcber hinaus wurde aber auch die NuGet-Konfiguration in Form einer Datei mit dem Namen <em>packages.config<\/em> hinzugef\u00fcgt.<br \/>\n<a href=\"http:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-packages.config.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-90\" src=\"http:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-packages.config.png\" alt=\"NuGet-packages.config\" width=\"982\" height=\"388\" srcset=\"https:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-packages.config.png 982w, https:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-packages.config-300x119.png 300w\" sizes=\"(max-width: 982px) 100vw, 982px\" \/><\/a>Diese Datei ist ab sofort wichtiger Bestandteil des Projekts. Wird sie gel\u00f6scht, fehlt die Information dar\u00fcber, welche Bibliotheken NuGet herunterladen soll.<\/li>\n<\/ol>\n<p>Nun k\u00f6nnen wir die hinzugef\u00fcgte Bibliothek verwenden. Sobald das Projekt mit anderen Entwicklern geteilt wird (z.B. \u00fcber SVN) wei\u00df das Visual Studio, dass es die Bibliothek <em>Fluent Assertions<\/em> braucht und l\u00e4dt sie aus dem Internet herunter. Der Entwickler muss sich darum nicht mehr k\u00fcmmern.<\/p>\n<p>Ein Problem gibt es allerdings mit Bibliotheken, die nicht \u00fcber nuget.org erh\u00e4ltlich sind. In einem solchen Fall hilft es nur, sich einen eigenen NuGet-Server einzurichten oder &#8211; falls es angeboten wird &#8211; auf den NuGet-Server des Herstellers zuzugreifen. Um einen weiteren NuGet-Server dem Visual Studio bekannt zu machen, \u00f6ffnen wir noch einmal den NuGet-Package Manager (Kontext-Men\u00fc im Solution Explorer und dort der Punkt &#8222;Manage NuGet Packages&#8230;&#8220;) und klicken unten links auf <em>Settings. <\/em>Im folgenden Dialog k\u00f6nnen nun weitere NuGet-Server hinzugef\u00fcgt werden, die dann bei der Online-Suche mit durchsucht werden.<\/p>\n<p><a href=\"http:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-Settings.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-91\" src=\"http:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-Settings.png\" alt=\"NuGet-Settings\" width=\"783\" height=\"394\" srcset=\"https:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-Settings.png 783w, https:\/\/invidit.de\/blog\/wp-content\/uploads\/2015\/03\/NuGet-Settings-300x151.png 300w\" sizes=\"(max-width: 783px) 100vw, 783px\" \/><\/a><\/p>\n<h2><\/h2>\n<h2><\/h2>\n<h2><\/h2>\n<h2><\/h2>\n<h2><\/h2>\n<h2><\/h2>\n<h2><\/h2>\n<h2>Zusammenfassung<\/h2>\n<p>In diesem Artikel haben wir uns angeschaut, was NuGet ist und wie es uns dabei helfen kann, Abh\u00e4ngigkeiten zu anderen Bibliotheken in den Griff zu bekommen. Dies ist vor allem dann hilfreich, wenn wir verteilt mit mehreren Entwicklern an einer L\u00f6sung arbeiten.<\/p>\n<p>&nbsp;<\/p>\n<p>Viel Spa\u00df beim Ausprobieren und Happy Coding w\u00fcnschen<\/p>\n<p>eure Spa\u00df-Coder<\/p>\n<p>&nbsp;<\/p>\n<p><em>Verwendete Werkzeuge:<\/em><\/p>\n<ul>\n<li>Visual Studio 2013 Community (<a title=\"https:\/\/www.visualstudio.com\/en-us\/products\/visual-studio-community-vs.aspx\" href=\"https:\/\/www.visualstudio.com\/en-us\/products\/visual-studio-community-vs.aspx\" target=\"_blank\">https:\/\/www.visualstudio.com\/en-us\/products\/visual-studio-community-vs.aspx<\/a>)<\/li>\n<li>NuGet (<a href=\"https:\/\/www.nuget.org\">https:\/\/www.nuget.org<\/a>)<\/li>\n<li>Fluent Assertions (<a title=\"https:\/\/github.com\/dennisdoomen\/fluentassertions\" href=\"https:\/\/github.com\/dennisdoomen\/fluentassertions\" target=\"_blank\">https:\/\/github.com\/dennisdoomen\/fluentassertions<\/a>)<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hallo Spa\u00df-Coder. Abh\u00e4ngigkeiten zu anderen, fremden Bibliotheken zu verwalten ist ein Graus. Vor allem dann, wenn wir verteilt, also mit mehreren Entwicklern an einer Softwarel\u00f6sung arbeiten. Wie sorgen wir daf\u00fcr, dass alle Entwickler die neue Bibliothek, die wir im Projekt eingebunden haben auch bekommen? Legen wir sie auf dem zentralen Dateisystem ab? Auf einem extra [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":97,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[22,90],"tags":[91,92],"_links":{"self":[{"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/posts\/45"}],"collection":[{"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/comments?post=45"}],"version-history":[{"count":5,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions"}],"predecessor-version":[{"id":109,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions\/109"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/media\/97"}],"wp:attachment":[{"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/media?parent=45"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/categories?post=45"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/invidit.de\/blog\/wp-json\/wp\/v2\/tags?post=45"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}