Πρόβλημα:
Αν προσθέσετε τις παράγεται * .js αρχεία σε TFS, στη συνέχεια, TFS να γράψουν-προστατεύει, αν τα check-in, ή δεν τους ελέγξετε έξω. Έτσι, εάν αλλάξετε το αρχείο * .ts, δεν μπορεί να δημιουργήσει το αρχείο * .js, επειδή το αρχείο έχει προστασία εγγραφής.
==> Σφάλμα
Αλλά αν δεν τους κάνουν check-in, το αρχείο * .js θα λείπει αν εκτελέσετε την ανάπτυξη.
==> Σφάλμα Συλλέγει, αλλά Runtime
Επίσης, αν το χρειάζεστε, όπως ένα ενσωματωμένο πόρων, που δεν μπορεί να αποκλείσει το αρχείο ...
Επιπλέον πρόβλημα 1:
Αν τρέχετε «Αναδόμηση λύση», Visual Studio θέλει να διαγράψετε το * .js αρχεία που δημιουργούνται από γραφομηχανή, πριν να εκτελέσει κατασκευής.
Αλλά διαγραφή δεν είναι δυνατή, επειδή τα αρχεία του * .js είναι προστασία εγγραφής ...
==> Σφάλμα
Επιπλέον πρόβλημα 2:
Από το καθαρό δεν είναι «Χτίστε», η προ-χτίσει γεγονότα δεν εκτελούνται σε καθαρό ...
Έτσι, αν αφαιρέσετε την προστασία εγγραφής στην προ-κατασκευή, θα λειτουργήσει αν δεν «χτίσει», αλλά θα αποτύχει αν επιλέξετε «Αναδόμηση», ανεξάρτητα από το αν το κάνετε στο διάλυμα ή στο έργο.
Επιπλέον πρόβλημα 3:
Δεν μπορείτε να ορίσετε μια εντολή προ-καθαρό εκδήλωση στον επεξεργαστή έργου ρυθμίσεις.
Έτσι, εδώ είναι ό, τι μπορείτε να κάνετε:
Run attrib -r /s(αφαιρεί προστασία εγγραφής) στο typescripted σας * .js αρχεία ως δράση προ-κατασκευή.
π.χ
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
Αυτό λειτουργεί, επειδή * επεκτείνεται:
- Αν το αρχείο δεν υπάρχει, δεν υπάρχει λάθος, επειδή δεν εντολή εκτελείται.
- Αν το αρχείο δεν υπάρχει, δεν υπάρχει λάθος, η εντολή εκτελείται.
Αν θέλετε να τρέξει σε ένα όνομα αρχείου, θα αποτύχει αν δεν υπάρχει το αρχείο.
Τώρα, θα πρέπει να επεξεργαστείτε το αρχείο έργου (* .csproj) με το χέρι, για να προσθέσετε ένα προ-καθαρή ενέργεια.
Η προ-καθαρή ενέργεια είναι η ίδια με την δράση προ-κατασκευή.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
Και εκεί θα πάτε. Τώρα μπορείτε να ελέγξετε τα * .js αρχεία, μπορείτε να επεξεργαστείτε το αρχείο * .ts (θα χρειαστεί να καταργήσετε την προστασία το αρχείο * .js, ή να τρέξει κατασκευή των υστέρων)
Αν θέλετε να το τρέξει σε κάθε αρχείο βάσης, η εντολή είναι:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
ή σε XML μορφή:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
Και αντί να αφαιρέσετε το χαρακτηριστικό μόνο για ανάγνωση χονδρικής στη δράση προ-κατασκευή, μπορείτε επίσης να ελέγξετε τα μεμονωμένα αρχεία με το εργαλείο TFS γραμμής εντολών:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
Με την ευκαιρία, μπορείτε να βρείτε μια λίστα με μακροεντολές VisualStudio / MSBuild εδώ:
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= vs-2017
Και για να ανακαλύψει την πραγματική αξία της μακροεντολής:
- κάντε δεξί κλικ στο έργο σας στο Solution Explorer, επιλέξτε Properties
- επιλέξτε το Σώμα Εκδηλώσεις καρτέλα
- κάντε κλικ στην προ-κατασκευή Επεξεργασία ή Επεξεργασία μετά την κατασκευή κουμπιού, είτε είναι μια χαρά
- στο παράθυρο που θα ανοίξει, κάντε κλικ στο μακροεντολές κουμπί
- μετακινηθείτε προς τα κάτω στη λίστα μέχρι να βρείτε
ProjectDir, στο επόμενο παράθυρο είναι η πραγματική αξία του
Επίσης, αντί να χρησιμοποιήσετε την εκδήλωση προ-κατασκευή του έργου, μπορείτε να προσθέσετε το ταμείο ως εντολή BeforeBuild-στόχο. Με αυτόν τον τρόπο κανείς δεν μπορεί να το αφαιρέσετε accidentially αν βάλουμε κάτι σε προ-κατασκευή στο έργο-ρυθμίσεις.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>