Set-Inhalt-Dateien "lokal kopieren : immer" in ein nuget-Paket
Generiere ich ein nuget-Paket aus einem Projekt mit diesem Befehl in den post-build-Ereignis. die variable %conf%
eingestellt ist, die richtige Konfiguration (debug oder release) und %1
ist der Projektname (z.B. "MyCompany".MyProject").
nuget pack -Prop Configuration=%conf% "%1.csproj" -exclude *.sql -IncludeReferencedProjects
Dieses Paket ist für unsere eigene Verwendung nur, es wird nie veröffentlicht werden, auf nuget. Es endet in unserem privaten repository.
In das Projekt, es ist eine Datei, die eingestellt ist, um generate action : content
und copy local : always
. (Mein visual studio ist in Französisch, so bin ich mir nicht 100% sicher, dass der traduction). Nennen wir es importantfile.xml
.
In der erzeugten Paket, dass ich am Ende mit dieser Struktur :
- content
- importantfile.xml
- lib
-net45 (.NetFramework,Version=v4.5)
-MyCompany.MyProject.dll
Was in Ordnung ist, ich will importantfile.xml
werden im Paket bereitgestellt, weil, na ja, diese Datei ist wichtig!
Wenn ich installieren Sie das package in einem anderen Projekt importantfile.xml
bereitgestellt wird, der an der Wurzel des Projekts. Das ist OK. Aber es ist nicht auf copy local : always
.
Ich brauche importantfile.xml
zu copy local : always
in diesem Projekt, wo ich die Installation meines Pakets.
Wie kann ich das erreichen?
Hinweise :
Ich kann set copy local : always
auf die Datei einfach nach der Installation des Pakets, das ist keine große Sache. Ich würde mit ihm Leben, wenn spätere updates des Pakets lassen würde diese Eigenschaft als-ist, was nicht der Fall ist. Bei der Aktualisierung des Pakets copy local
genullt zu never
(wie gesagt hier).
Gibt es eine nuspec-Datei in dem Ordner des Projekts, hier ist es :
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<copyright>Copyright 2014</copyright>
<tags>some random tags</tags>
</metadata>
</package>
InformationsquelleAutor Johnny5 | 2014-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie PowerShell verwenden, und die
Install.ps1
Haken zur Verfügung gestellt von NuGet.Sehen die Dokumentation.
Per PowerShell müssen Sie die Option "Suche" für das content-element auf, die Ihren
importantfile.xml
in einem Attribut. Wenn das Skript gefunden, es hat<CopyToOutputDirectory>Always</CopyToOutputDirectory>
als Kind-element.Finden Sie einige PowerShell-snippets hier. Werfen Sie einen Blick auf die
.ps1
- Dateien.Können Sie Folgendes versuchen (nicht getestet). Die Datei muss benannt werden
Install.ps1
kopiert und in dietools
Ordner:Sollten Sie auch prüfen, ob alles vollständig entfernt beim deinstallieren des Pakets.
Hinweis von Jonhhy5
Bei der Aktualisierung des Pakets über
update-package
Visual Studio warnt, dass das Projekt geändert wird, "außerhalb der environnment". Das ist verursacht durch$doc.Save($project.FullName)
. Wenn ich auf neu laden vor der Befehl vollständig abgebrochen, es verursacht manchmal Fehler. Der trick ist, verlassen Sie den dialog dort, bis der Prozess abgeschlossen ist, und dann laden der Projekte.Wirklich? Was fehlt dir?
Meinst du, fehlt doc? Gut, die wenigsten gewesen wäre, das Dokument mit den Variablen, die initiiert werden
param($installPath, $toolsPath, $package, $project)
. Der Fall in der Frage ist eine vereinfachte, wäre es schön, wenn ich könnte suchen$package
für den Inhalt von Dateien, aber es gibt nichts über das, was bietet diese variable.Wahre Geschichte. Aber die Suche nach der Inhalt-Datei über " Select-Xml nicht glücklich machen?
Beachten Sie, dass in V3 Installieren.ps1 (und Deinstallieren.ps1) - Unterstützung wurde entfernt. Init.ps1 wird immer noch unterstützt.
InformationsquelleAutor timmkrause
Statt mit einem PowerShell-Skript ein weiterer Ansatz ist die Verwendung einer MSBuild-oder Requisiten-Datei mit dem gleichen Namen wie die Paket-id:
In der nuspec-Datei, anstatt das hinzufügen der gewünschten Dateien, um die
Content
Verzeichnis, fügen Sie Sie derBuild
Verzeichnis zusammen mit der Ziele-Datei.Wenn Sie erfordern unterschiedliche Inhalte für unterschiedliche Architekturen, dann können Sie Architektur-Ordner unter
Build
auch jede mit Ihren eigenen Zielen Datei.Vorteile für die Verwendung eines targets-Datei über das PowerShell-Skript mit NuGet
Content
Verzeichnis:Ich mag diese Lösung mehr zu. Einfacher und schärfer.
Ich mag diese Lösung, und verwenden Sie es in meinem Szenario. Jedoch, eine Sache zu beachten - wenn Sie erwarten, dass die Nutzer möglicherweise ändern möchten
importantfile.xml
, dann ist diese Lösung nicht das beste für Sie - die Datei lebt nur in derpackages
Ordner. Allerdings, wenn Sie nicht erwarten, dass die Benutzer diese Datei verändern, dann ist dies eine gute Lösung 🙂Funktioniert es mit visual studio 2013? Ich kann nicht mit dieser Lösung arbeiten...
Ich konnte nicht diese arbeiten in VS2013 mit Nuget 2.12.0.817, bis ich umbenannt in den target-Datei entsprechend der Paket-id. Diese Namenskonvention angegeben ist in der Nuget 2.5 release notes docs.nuget.org/ndocs/release-notes/nuget-2.5
InformationsquelleAutor kjbartel
Ich weiß, Sie Jungs haben eine funktionierende Lösung für dieses, aber es hat nicht für mich arbeiten, also werde ich teilen, was ich zog aus dem NLog.config NuGet-Paket installieren.ps1 (github Quelle hier).
Scheint es, ein wenig mehr geradeaus zu mir und nur in der Hoffnung, anderen zu helfen, wird wahrscheinlich stolpern.
Finden Sie die int-Werte akzeptiert für BuildAction hier und die angenommenen Werte für CopyToOutputDirectory hier.
falls der link bricht wieder
Felder
prjBuildActionCompile 1
Die Datei kompiliert wird.
prjBuildActionContent 2
Die Datei ist im Content-Projekt Ausgabe-Gruppe (Bereitstellung von Anwendungen, Diensten und Komponenten)
prjBuildActionEmbeddedResource 3
Die Datei ist enthalten, in der main-generierte assembly oder in einer Satelliten-assembly als Ressource.
prjBuildActionNone 0
Keine Aktion durchgeführt.
Sie verdienen eine shout-out! Hinzugefügt.
Die BuildAction-link ist kaputt. Hier ist was ich gefunden habe, anstatt: docs.microsoft.com/en-us/dotnet/api/...
danke. aktualisiert die Verknüpfung und dann auch Hinzugefügt, Screenshot/text-Werte auf die Antwort, um es noch weiter zu vervollständigen
InformationsquelleAutor workabyte
Ich habe die Kopien der Dateien aus meinem Ordner in den Ausgabeordner (bin/debug oder bin/release). Funktioniert wie ein Charme für mich.
Nuspec-Datei:
MyProject.Ziele
InformationsquelleAutor Rahbek
Ich geschrieben habe, ein kleines tool namens
NuGetLib
automatisch Dateien hinzufügen, um den nuget-Paket nach zu bauen.tools
Ordner mit IhrenInstall.ps1
SkriptnugetPackage
nugetPackage
https://stackoverflow.com/a/47134733/6229375
InformationsquelleAutor Dominic Jonas