Nuget-Paket-generation Ausschließen lib-Ordner
Ich versuche zu generieren nuget-Paket mit .nuspec-Datei. Wir haben mehrere Projekte unter einem Dach und versuchen, zu erstellen nLog.config (Und transform-Dateien) und verteilen Sie es via nuget-Paket. Für jede version von .Net Framework ich bin auf der Suche für die gleiche Gruppe von config-Dateien (nur configs keine dll). Also ich weiß wirklich nicht verlangen \lib\net45\myproject.dll oder \lib\net40\myproject.dll. Obwohl, wenn ich generieren nuget-Paket es immer schaffen, den lib-Ordner und include-dll. Das erzeugt eine Art Abhängigkeit, die für jedes Projekt zu finden .net framework-version.
Unten ist mein nuspec-Datei im Falle, wenn jemand will, um zu verweisen, wenn ich mache etwas falsch. Ich habe versucht "" und einige andere Dinge, aber kein Glück.
<?xml version="1.0"?>
<package >
<metadata>
<id>NLogConfig</id>
<version>1.0.3</version>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<copyright>Copyright 2013</copyright>
<dependencies>
<dependency id="NLog" version="2.1.0" />
<dependency id="NLog.Schema" version="2.1.0" />
</dependencies>
</metadata>
<files>
<file src="NLog.config" target="content" />
<file src="NLog.Debug.config" target="content" />
<file src="NLog.UAT.config" target="content" />
<file src="NLog.Release.config" target="content" />
<file src="tools\*.*" target="tools"/>
</files>
</package>
Wie kann ich ausschließen, den lib-Ordner komplett mit nuspec-Datei (Bevorzugt) oder einen anderen Mechanismus? Danke !!
Update 1:
Habe ich versucht zu schleichen, aber war nicht erfolgreich. Ich legte post-build-event und versucht zu löschen DLL. Aber irgendwie system war schlau, es gab mir einen Fehler "Fehler 79 Nicht finden 'C:\GITRepo\NLogConfig\NLogConfig\bin\Release\NLogConfig.dll'. Stellen Sie sicher, dass das Projekt gebaut worden ist."
Update 2
Bisher fand ich keine Möglichkeit um Hilfe .csproj zu bauen nuget-Pakets, aber mit externen Befehl und die Angabe nuspec-Datei, die ich erreichen konnte, die gleichen Ergebnisse. Frage bleibt immer noch das ist mein workaround nur.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollte ich meine Erfahrung mitteilen. Das, was ich brauchte, war der Einsatz von csproj als Nuget.exe Ziel (da wollte ich NuGet zu lösen Abhängigkeiten automatisch) und keine lib Ordner in einen Ergebnis-Paket. Weglassen, dass Ordner, die ich verwendet, den folgenden Befehl ein:
Verwenden Sie die NuGet Pack-Befehl die option -Tool. Sehen https://docs.microsoft.com/en-us/nuget/tools/cli-ref-pack.
"Legt fest, ob die output-Dateien des Projektes soll in den tool-Ordner."
tools
Ordner... Allerdings mag ich "Dav Evans"'s Ansatz mehr, wie es die config in der.nuget
Paket, anstatt ändernnuget.exe
pack syntax. stackoverflow.com/a/30883992/3063884Ich löste dieses problem, indem Sie zunächst den Ausschluss aller Dateien aus meinem Projekt-Ordner Ausgang
Dann, wenn tatsächlich die Verpackung über NuGet.exe ich gezielt meine .nuspec-und nicht meine csproj. Das resultierende Paket nicht enthalten, mein Projekt ist die Ausgabe-dll unter /lib Ordner.
.nuspec
. Targeting die.csproj
Ergebnisse in derlib
Ordner einbezogen werden. Ich mag diesen Ansatz, weil es nicht erforderlich ist, ändern syntax, um den nuget-Befehl, statt einschließlich mit der.nuspec
- Datei.Dies ist das erwartete Verhalten, wenn Sie packen ein Projekt, wie es der ganze Punkt ist, dass nuget Lesen Sie das Projekt und generieren ein Paket entsprechend. Und jedem .nuspec-Datei, die gefunden wird, wird nur in der Lage sein, um Inhalt hinzuzufügen, nicht entfernen, die Sie zuvor Hinzugefügt.
Also, was Sie bemerken, ist Ihre zweite update ist, was Sie tun sollen - pack durch die .nuspec-Datei statt.
Halten Sie die lib-Dateien, die im Paket enthalten, mit dem exclude-syntax. So etwas wie unten:
Weitere Informationen finden Sie unter http://docs.nuget.org/docs/reference/nuspec-reference
target
param ist nicht im Lieferumfang enthalten.müssen Sie die Abhängigkeiten element und , bis Sie ein Projekt verwenden, um ein Paket von nuget wird fügen Sie einen Verweis auf diese dlls
Bin ich auch Schwierigkeiten mit diesem und meinem Problem mit dem workaround, das ist zu trennen von der Erstellung des Pakets aus dem Projekt, ist, dass ich nicht imstande bin, die Verwendung von Platzhaltern in der nuspec-Datei. Mein workaround ist, zu installieren.ps1 PowerShell-Skript, welches ausgeführt wird, nachdem das hinzufügen des Pakets zu einem Projekt. Sie werden jedoch brauchen, um die ExecutionPolicy erste in der Paket-manager-Konsole zunächst so, dass PowerShell-Skripts ausführen können.
Ich weiß wirklich nicht, wie Sie diese Problemumgehung, weil es wird nicht ausgeführt, in der Maschinen, auf denen die ExecutionPolicy beschränkt ist, was der Standardeinstellung entspricht.
Also ich hatte das gleiche Problem, ich wusste nicht wirklich, ob die .dll enthalten war, aber war mit ausgestellt .cs in meinen content als dann die Klasse existiert, in der sowohl die Inhalte, die Hinzugefügt wurde, um das Ziel-Projekt und die dll, die Hinzugefügt wurde, wenn das Paket installiert wurde (erraten Sie etwas entlang den gleichen Linien).
Ich landete ändern Sie die build action auf der .cs-Dateien in den content Ordner auf NONE, so dass Sie am Ende nicht in der DLL.
HINWEIS: wenn Sie dies tun keiner den code in das .cs-Datei wird verifiziert, so werden Sie dies tun wollen, als letzten Schritt, wenn Sie wissen, alles, was Recht ist
Wäre es schön, auszuschließen DLL insgesamt, aber das war mein workaround mit dem Projekt als build.
Hoffe, dies hilft jemand