Dies ist das umgekehrte Problem von dem, was ich in der Regel gelesen habe, die Leute versuchen, Dateien in das NuGet-Paket enthalten. Ich versuche Stop Datei von automatisch enthalten sein.NuGet Pack: ignorieren Standard enthält
Ich erstelle eine Bibliothek von vorkompilierten MVC-Ansichtsvorlagen (mit RazorGenerator.Mvc), .less
Dateien und JavaScript, um diese nach Bedarf zu unterstützen. Die Idee ist, dass dies grundlegende Dinge sind, die auf alle unsere Seiten gehen.
standardmäßig nuget pack
enthält alle Dateien Aktion beim Aufbau gekennzeichnet: Inhalt in Ihrem Projekt, das jedes neu erstellte Ansicht, .less
Datei oder ein Skript wäre. Es scheint keine Option zu geben, dieses Verhalten zu überschreiben. Eine verwandte Frage hier präsentiert eine Lösung von empty <files>
node in the .nuspec
to stop all includes, aber ich möchte einige Dateien, nur nur diejenigen, die ich wähle.
nun als Notlösung, kann ich gehen, explizit nicht alles sein Inhalt (mit Keine statt), dann explizit Setup, welche Dateien ich tun und wollen nicht kopiert und wo ich sie wollen kopiert mit der .nuspec
Datei. Wenn jedoch ein anderer Entwickler, z. B. mein zukünftiges Selbst, diesen Schritt vergisst, werden die neu hinzugefügten Dateien bei der nächsten Installation oder Aktualisierung in das Paket und dann in das Zielprojekt kopiert.
fand ich OctoPack, und das wird mit nichts standardmäßig sobald es einen <files>
Knoten im .nuspec
erkennt, aber ich bin nicht etwas anderes von Teamcity verwenden, und mein Build-Server-Skripte Umschreiben zu verstehen, wie man octoPack anstelle von nugget pack aufzurufen, erscheint mir nicht als eine großartige Option. OctoPack hat auch Einschränkungen; die Abhängigkeiten müssen manuell aufgelistet werden, die Ersetzungstoken für die .nuspec-Datei müssen in der Befehlszeile übergeben werden (anstatt von AssemblyInfo.cs
gelesen zu werden), und es scheint einfach nicht so, dass das Tool für diese Verwendung gedacht war - sie selbst wenn Sie sagen, "OctoPack sollte nur auf Projekten installiert werden, die Sie bereitstellen werden - das bedeutet die Konsolenanwendungsprojekte, Windows-Dienstprojekte und ASP.NET-Webanwendungen. Komponententests, Klassenbibliotheken und andere unterstützende Projekte werden nicht ausgewählt." . " (OctoPack Documentation)
Die nächste Alternative, die ich versucht msbuild
wurde mit der Content-Gruppe während der BeforeBuild
Veranstaltung einfach auszulöschen:
<Target Name="BeforeBuild">
<ItemGroup>
<Content Remove="**\*.*" />
<None Include="**\*.*" />
</ItemGroup>
<Message Text="Content files: @(Content)" Importance="High" />
</Target>
Die Nachricht überprüft, ob der Inhalt Gruppe leer ist, aber nuget pack
scheint nicht sich kümmern; Es enthält trotzdem alle Dateien.
Hat jemand erfolgreich ein Paket wie dieses erstellt, ohne alles manuell markieren zu müssen Build Aktion: Keine und ohne OctoPack verwenden?
"Es ist also keine perfekte Lösung, die so etwas wie' --no-default-content' "wäre - eine perfektere Lösung würde Ihnen erlauben, etwas in die .nuspec-Datei zu schreiben, um dies zu kontrollieren. Wer wird sich daran erinnern, welche Parameter jedes Mal an "nugget" übergeben werden? – binki
Jeder, der einen Continuous Integration Server verwendet, muss sich nicht daran erinnern. Jetzt muss ich daran denken, dass wenn ich eine neue Abhängigkeit hinzufüge oder eine Abhängigkeitsversion ändere, ich sie manuell zu dem nuspec hinzufügen muss, anstatt in der Lage zu sein, diese Daten aus packages.config zu lesen. –