Problem:
Wenn Sie die generierten hinzufügen * JS - Dateien auf TFS, dann TFS schreib schützt sie, wenn man sie nicht in Anspruch oder überprüfe sie nicht aus. Also , wenn Sie die * .ts - Datei ändern, kann es nicht erzeugen , um die * JS - Datei, da die Datei schreibgeschützt ist.
==> Fehler
Aber wenn man sich in nicht überprüfen, die * .js - Datei fehlt wird, wenn Sie bereitstellen laufen.
==> Kompiliert, aber Laufzeitfehler
Auch, wenn Sie es als eingebettete Ressource benötigen, können Sie die Datei nicht ausschließen ...
Zusätzliches Problem 1:
Wenn Sie „Rebuild Solution“ ausführen, Visual Studio will von Typoskript erzeugen * JS - Dateien zu löschen, bevor es Build ausführt.
Aber das Löschen ist nicht möglich, da die * .js - Dateien sind schreibgeschützt ...
==> Fehler
Zusätzliches Problem 2:
Da nicht sauber „Build“ ist, sind die Pre-Build - Ereignisse nicht sauber ausgeführt ...
Also , wenn Sie den Schreibschutz auf Pre-Build entfernen, wird es funktionieren , wenn Sie „bauen“ zu tun, aber es wenn Sie „Neu erstellen“ wird fehlschlagen, und zwar unabhängig davon , ob Sie es in der Lösung oder in dem Projekt zu tun.
Zusätzliches Problem 3:
Sie können keine Vorreinigung Ereignisbefehl in der Projekt-Einstellungen Editor definieren.
So, hier ist was Sie tun können:
Run attrib -r /s(entfernt den Schreibschutz) auf Ihrem typescripted * JS - Dateien als Pre-Build - Aktion.
z.B
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
Dies funktioniert, weil * erweitert wird:
- Wenn die Datei nicht existiert, gibt es kein Fehler, da kein Befehl ausgeführt wird.
- Wenn die Datei vorhanden ist, kein Fehler vorhanden ist, wird der Befehl ausgeführt.
Wenn Sie es auf einem Dateinamen laufen würden, wäre es nicht, wenn die Datei nicht existiert.
Nun müssen Sie die Projektdatei (* CSPROJ) von Hand bearbeiten, eine Vorreinigung Aktion hinzuzufügen.
Die Vorreinigung Wirkung ist das gleiche wie die Pre-Build - Aktion.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
Und los geht. Jetzt können Sie die Check * JS-Dateien in, können die * .ts-Datei bearbeiten (Sie müssen die * JS-Datei aufzuheben, oder führen zu bauen danach)
Wenn Sie es auf einer Pro-Datei-Basis ausgeführt werden sollen, ist der Befehl:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
oder in XML-Form:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
Und statt die der Entfernung von Nur-Lese-Attribut Großhandel in der Pre-Build-Aktion können Sie auch die einzelnen Dateien überprüfen mit dem TFS-Befehlszeilentool:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
By the way, können Sie eine Liste von Visual Studio / MsBuild Makros finden Sie hier:
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= vs-2017
Und um den tatsächlichen Wert des Makros herauszufinden:
- Rechtsklick auf das Projekt im Solution Explorer, wählen Sie Eigenschaften
- wählen Sie die Build - Events Registerkarte
- klicken Sie auf das Bearbeiten Präbuildereignis oder bearbeiten Post-Build - Taste, entweder ist in Ordnung
- in dem Fenster , das sich öffnet, klicken Sie auf die Makros Schaltfläche
- scrollen Sie die Liste nach unten , bis Sie finden
ProjectDir, in der nächsten Scheibe seinen Istwert
Auch statt dem Pre-Build-Event im Projekt verwenden, können Sie die Kasse als Before-Ziel-Befehl hinzufügen. Auf diese Weise kann niemand es versehentlich entfernen, wenn sie etwas in Pre-Build-in-Projekt-Einstellungen setzen.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>