Kann der Inhalt einer Datei, die über ein NuGet-Paket existiert, geändert werden? Nehmen wir an, Sie erstellen eine brandneue MVC3-Website. Sie möchten ein NuGet-Paket installieren, das die Startseite aktualisiert. Ändern Sie möglicherweise die Willkommensnachricht und ändern Sie dann das Layout so, dass einige neue Views, die Sie erstellt haben, enthalten sind, und aktualisieren Sie den Home Controller, um eine Methode zum Zurückgeben Ihrer neuen Ansicht hinzuzufügen. Wie würde das gemacht werden?Wie ändern Sie eine vorhandene Datei über eine NuGet-Paket-Installation?
Antwort
Nachdem Sie das NuGet-Paket installiert haben, können Sie alle gewünschten Dateien manuell ändern. Bearbeiten Sie sie einfach in VS (oder mit einem anderen Editor). Der einzige Unterschied zu NuGet-Paketen besteht darin, dass Ihre geänderten Dateien nicht entfernt werden, wenn Sie das Paket deinstallieren/aktualisieren, da zwischen den ursprünglichen Paketdateien und Ihren Dateien Änderungen festgestellt werden. Es wird eine Erwähnung davon geben, ist die Protokolle.
Update:
NuGet hat Abstützungen zum Modifizieren Projektdateien während einer Paketinstallation durch .transform and .pp files. Aber das hat seine Grenzen, .transform files fügt den Konfigurationsdateien Inhalt hinzu (sie können nicht bearbeiten), während .pp-Dateien für neue Quellcodedateien gedacht sind.
Sie können vorhandenen Quellcode mithilfe von EnvDte CodeModel in PowerShell (d. H. Install.ps1) ändern. Es ist jedoch ein bisschen komplexer.
Wenn Sie das JQuery NuGet-Paket im NuGet Package Explorer öffnen (oder einfach das Paket entpacken) und sich install.ps1 und common.ps1 ansehen, können Sie ein Beispiel sehen, in dem sie automatisch eine Zeile zu _references.js hinzufügen für JQuery, damit die JQuery-API in IntelliSense angezeigt wird.
Aber ja, es ist ein ziemlich komplexer Prozess, Code automatisch zu aktualisieren (besonders Code, den Leute bearbeiten können). Das JQuery-Beispiel beinhaltet die Verwendung eines regulären Ausdrucks, um nach einem vorhandenen Verweis zu suchen, bevor er aktualisiert wird. All dies bewirkt das Hinzufügen/Aktualisieren eines einzeiligen Kommentars zu einer bestimmten Datei an einem bekannten Speicherort (und sollte den Build nicht unterbrechen, wenn er vorhanden ist) geht schief, da es nur ein Kommentar ist).
Ich würde gerne mehr Beispiele und sogar eine Bibliothek von Hilfsfunktionen für Dinge wie die OP-Anfrage sehen.
Hier ist eine Funktion von common.ps1:
function AddOrUpdate-Reference($scriptsFolderProjectItem, $fileNamePattern, $newFileName) {
try {
$referencesFileProjectItem = $scriptsFolderProjectItem.ProjectItems.Item("_references.js")
}
catch {
# _references.js file not found
return
}
if ($referencesFileProjectItem -eq $null) {
# _references.js file not found
return
}
$referencesFilePath = $referencesFileProjectItem.FileNames(1)
$referencesTempFilePath = Join-Path $env:TEMP "_references.tmp.js"
if ((Select-String $referencesFilePath -pattern $fileNamePattern).Length -eq 0) {
# File has no existing matching reference line
# Add the full reference line to the beginning of the file
"/// <reference path=""$newFileName"" />" | Add-Content $referencesTempFilePath -Encoding UTF8
Get-Content $referencesFilePath | Add-Content $referencesTempFilePath
}
else {
# Loop through file and replace old file name with new file name
Get-Content $referencesFilePath | ForEach-Object { $_ -replace $fileNamePattern, $newFileName } > $referencesTempFilePath
}
# Copy over the new _references.js file
Copy-Item $referencesTempFilePath $referencesFilePath -Force
Remove-Item $referencesTempFilePath -Force
}
Danke! Ein sehr "Hallo, Welt!" - Beispiel, um diese Art von Aufgabe zu bewältigen. – vbullinger
- 1. Vorhandene Ressource-Datei programmgesteuert ändern
- 2. „Segmentation fault“, wenn eine vorhandene Datei öffnen
- 3. Überschreiben Sie eine vorhandene Datei mit Datum als Dateiname
- 4. So ändern Sie die Codierung für vorhandene Datei mit Vim
- 5. Ändern Sie eine Datei mit einem Schienengenerator
- 6. Wie fügt man Daten in eine vorhandene Dropbox-Datei ein?
- 7. Ändern Sie eine CS-Datei im Vorkompilierungsereignis
- 8. Wie eine vorhandene Klasse zu Td in CSS-Datei hinzufügen?
- 9. Wie aktualisiere ich Metadaten für eine vorhandene Amazon S3-Datei?
- 10. Wie hängen Sie an eine bereits vorhandene Zeichenfolge an?
- 11. So öffnen Sie eine Datei in Android über eine Absicht
- 12. So überschreiben Sie eine vorhandene Erweiterungsmethode
- 13. An eine vorhandene Zeile in einer TXT-Datei anfügen
- 14. Eine vorhandene MySQL-Spalte zu einem JSON-Datentyp ändern
- 15. Wie eine vorhandene Umgebungsvariable in subprocess.Popen() verwenden
- 16. eine Datei node.js mit ändern
- 17. Ändern von newid() zu newsequentialid() für eine vorhandene Tabelle
- 18. , wie eine Datei über Dockerfile zu bearbeiten
- 19. Wie schiebe ich eine Ansicht in eine vorhandene Tabellenzelle?
- 20. Wie Legen Sie XML in eine vorhandene XML-Knoten
- 21. Wie kann ich eine Zip-Datei nur im Speicher ändern?
- 22. Wie an eine vorhandene Datei in R anhängen, ohne sie zu überschreiben?
- 23. Wie kann ich eine UIView programmgesteuert über eine vorhandene UIView mit Autolayout zentrieren?
- 24. Docker - kann Volume nicht über vorhandene Datei mounten, Datei existiert
- 25. Astyle über eine Zeichenfolge oder eine Datei über C aufrufen #
- 26. Ändern von Text in eine Datei
- 27. So verwenden Sie eine vorhandene SQLite-Datenbank in HTML5
- 28. eine Datei über einen Netzwerkpfad
- 29. Ändern Sie eine Timestamp-Logik in JSQMessagesViewController
- 30. So veröffentlichen Sie eine vorhandene API auf WSO2 ESB
Das ist nicht ganz das, was ich meine. Ich meine, können Sie eine Datei über die Installation selbst ändern? Zum Beispiel habe ich gehört, dass Sie die Datei web.config im NuGet-Paket ändern können. Wie, eine Direktive oder ein Skript, etc? Ich stelle mir vor, dass Sie jede Datei über ein Skript ändern können, aber gibt es eine typische Vorgehensweise? Wenn Sie also ein Paket installieren, werden einige neue Dateien hinzugefügt, einige Ihrer vorhandenen Dateien werden jedoch geändert. Vielleicht ändern Sie den Inhalt von default.aspx zum Beispiel. Bekomme ich meine Bedeutung schon? – vbullinger
habe es jetzt, ich habe meine Antwort oben aktualisiert. Kurz gesagt, Nuget hat Unterstützung für häufige einfache Szenarien in .pp/.transform-Dateien gebacken. Das Ändern von vorhandenem Code wird von NuGet nicht unterstützt und würde durch Powershell-Skripte erfolgen. Ich würde CodeModel betrachten, aber ich konnte kein einfaches Beispiel finden. –
Ich sah Dinge über Dateien - ich glaube, die PP-Dateien - wo Sie Variablen statt Dinge wie Namespaces verlassen würde und es würde aus der Projektdatei usw., aber wie fügt das Entity Framework-Paket zum Beispiel hinzu die web.config Knoten? Ist es mit einem Skript? – vbullinger