Was sind MSbuild-Aufgaben und in welchen Situationen sollten Sie sie verwenden oder nicht verwenden? Was sind die Alternativen? Welche Vorteile oder Nachteile bieten sie?Was sind MSbuild-Aufgaben und wann und warum würden Sie sie verwenden?
Antwort
Eine Task implementiert die Task class und kann als solche von msbuild code aufgerufen werden. Normalerweise wird dies z.B. Schreiben eines C# -Codes, der die Klasse implementiert und sie in eine DLL integriert, die an das UsingTask-Element übergeben wird, um es verfügbar zu machen. Es gibt auch einen kürzeren Weg, dies zu tun: mit Inline Tasks. Dies ermöglicht das direkte Schreiben des Codes in die Msbuild-Datei.
Eigentlich gibt es keine Alternative, da eine Task die oben angegebene Definition hat und es nur eine solche Sache mit genau diesen Eigenschaften in msbuild gibt. Es gibt auch eine Target, die verwendet wird, um Tasks aufzurufen (und eine Reihe anderer Funktionen wie das Ausdrücken von Abhängigkeiten zu anderen Zielen, das Definieren von Ein/Ausgängen, ...). Es ist also eine Alternative, wenn man bedenkt, dass es Überschneidungen gibt, und ich nehme an, dass Sie das wollen: Sie können Funktionen erstellen, indem Sie mehrere Aufgaben nacheinander in einem Ziel aufrufen (oder Ziele von anderen Zielen abhängig machen) oder indem Sie Ihre schreiben eigene Aufgabe, die alle oder einige dieser Aktionen ausführt.
Beispiel: Angenommen, Sie möchten ein Verzeichnis auflisten und alle .c-Dateien in ein anderes Verzeichnis kopieren und dann das Verzeichnis komprimieren. Entweder Sie schreiben ein Ziel, in dem Sie die Dateien auflisten (mit einer ItemGroup), und dann rufen Sie die Aufgaben Kopieren und Zip auf. Oder Sie schreiben eine benutzerdefinierte Aufgabe, die C# -Aufrufe wie Directory.GetFiles/File.Copy/ZipFile.CreateDirectory verwendet und den Zielanruf nur Ihre benutzerdefinierte Aufgabe hat.
Vorteile von benutzerdefinierten Aufgaben: Sie können beliebigen Code enthalten, so können Sie im Grunde tun alles können Sie sich vorstellen. Nachteil: muss mit dem Msbuild-Code erstellt, gewartet und ausgeliefert werden (entweder als DLL oder als Quellcode, in diesem Fall müssen sie im laufenden Betrieb erstellt werden, bevor sie verwendet werden können).
Vorteile von Zielen mit vorhandenen (eingebauten) Aufgaben: Die gängigste Funktionalität in Build-Systemen ist in bewährter Code mit reichlich Dokumentation und/oder SO Fragen als zusätzliche Ressourcen, keine Neuerfindung von Rädern, andere wissen dieser Code auch schon, keine Pflege von benutzerdefiniertem Code. Nachteil: Nicht jede einzelne Funktionalität ist verfügbar, die Anzahl der zusammengesetzten Aufgaben zur Erreichung der Funktionalität ist möglicherweise zu hoch oder unpraktisch.
Die Verwendung von Aufgaben wird grundsätzlich durch die beiden obigen Absätze beantwortet. Ich kann Ihnen unmöglich sagen, wie viele benutzerdefinierte Aufgaben Sie in der Praxis schreiben werden, da ich Ihre Anwendungsfälle nicht kenne. Betrachtet man den gesamten msbuild-Code, den ich selbst habe (um mit einer Mischung aus C/C++/C#/Python-Projekten umzugehen), würde ich sagen, dass es zu 95% integrierte Aufgaben und 5% benutzerdefinierte Aufgaben sind. Von diesen 5% stammen die meisten von Aufgaben, die von anderen Ike MSBuild Community Tasks und MSBuild Extension Pack geschrieben wurden.
- 1. Was sind Ausdrucksbäume, wie verwenden Sie sie und warum würden Sie sie verwenden?
- 2. wann/warum würden Sie QUOTENAME verwenden?
- 3. Was ist SAPI und wann würden Sie es verwenden?
- 4. Wann und warum würden Sie Apache commons-digester verwenden?
- 5. Wann würden Sie PendingIntent verwenden?
- 6. Wann würden Sie XamlServices.Transform() verwenden?
- 7. Was ist eine ABSTRACT CLASS und INTERFACE und wann würden Sie sie in PHP verwenden?
- 8. Warum würden Sie fmt.Sprint verwenden?
- 9. Signatur- und Exchange-Schlüsseltypen - was sind sie und wann sie zu verwenden sind (Makecert -sky)?
- 10. Wann würden Sie Generische Sammlungen nicht verwenden?
- 11. Warum würden Sie Umask verwenden?
- 12. Wann würden Sie GUIDs als Primärschlüssel verwenden?
- 13. Wann würden Sie Delegierte in C# verwenden?
- 14. Warum würden Sie string.toString() verwenden?
- 15. Was ist ein Mock und wann sollten Sie es verwenden?
- 16. Was würden Sie verwenden, anstatt Excel in einem Firmenarbeitsplatz zu verwenden, wenn Sie kein Programmierer sind?
- 17. Verschlüsse in PHP ... was genau sind sie und wann müssten Sie sie verwenden?
- 18. Wann IEquatable verwenden und warum
- 19. Warum und wann process.nextTick verwenden?
- 20. Warum würden Sie Path.Direction.CW und CCW in Android verwenden?
- 21. Was sind TestExecutionListeners und was machen sie?
- 22. Wann und warum sollte ich attr.Factory verwenden?
- 23. Was sind Ansichten für Sammlungen und wann möchten Sie sie verwenden?
- 24. Verstehen, wann und warum verschiedene Android-Threads zu verwenden sind
- 25. Was sind PEGA-Tools und wo verwenden wir sie?
- 26. Was sind Vor- und Nachteile von Raw-Dateien in SSIS und wann verwenden wir sie?
- 27. Wann würden Sie einen Mutex ohne Arc verwenden?
- 28. Welche Vorteile hat die Nutzung von Oslo und M und wann würden Sie sie nutzen?
- 29. Was und wann Tuple verwenden?
- 30. Wann würden Sie das Schlüsselwort $ this in PHP verwenden?