Probleem:
Als u de gegenereerde * .js bestanden toe te voegen aan TFS, dan TFS schrijven-beschermt hen, als je ze in te checken, of ze niet uitchecken. Dus als je de * .TS bestand wijzigt, kan het niet het * .js bestand te genereren, omdat het bestand is beveiligd tegen schrijven.
==> Error
Maar als je ze niet in te checken, zal het * .js bestand afwezig zijn als je loopt te zetten.
==> compileert, maar Runtime fout
ook, als je het nodig hebt als een ingesloten bron, kunt u het bestand niet uit te sluiten ...
Extra probleem 1:
Als je loopt "Rebuild Solution", Visual Studio wil verwijderen de * .js bestanden die door typoscript, voordat het build uitvoert.
Maar verwijderen is niet mogelijk, omdat het * .js bestanden zijn beveiligd tegen schrijven ...
==> Error
Extra probleem 2:
Aangezien schoon is niet "Build", de pre-build evenementen worden niet uitgevoerd op schone ...
Dus als je de write-bescherming op de pre-build te verwijderen, zal het werken als je het "bouwen", maar het mislukt als u kiest voor "Rebuild", ongeacht of je het doet in de oplossing of in het project.
Extra probleem 3:
U kunt een pre-clean commando geval niet te definiëren in de editor project-settings.
Dus, hier is wat u kunt doen:
Run attrib -r /s(verwijdert schrijf beveiliging) op uw typescripted * .js-bestanden als pre-build actie.
bv
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
Dit werkt, omdat * wordt uitgebreid:
- Als het bestand niet bestaat, er geen fout is, omdat er geen opdracht wordt uitgevoerd.
- Als het bestand bestaat, er geen fout is, wordt de opdracht uitgevoerd.
Als je het zou draaien op een bestandsnaam, het zou mislukken als het bestand niet bestaat.
Nu, moet u het project bestand (* .csproj) met de hand bewerkt, om een pre-clean actie toe te voegen.
De pre-clean actie is hetzelfde als de pre-build actie.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
En daar ga je. Nu kunt u de * .js bestanden in te checken, kan het * Ts bestand te bewerken (je nodig hebt om het * .js bestand onbeveiligd te maken, of achteraf uit te voeren build)
Als u wilt het uit te voeren op een per bestand basis, is de opdracht:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
of in XML-vorm:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
En in plaats van het verwijderen van het kenmerk alleen-lezen groothandel in de pre-build actie, kunt u ook de individuele bestanden met de TFS command-line tool:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
: Door de manier, kunt u een lijst met VisualStudio / MSBuild macros hier
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= vs-2017
En om uit te vinden de werkelijke waarde van de macro:
- klik met de rechtermuisknop op het project in de Solution Explorer en selecteer Eigenschappen
- selecteert u de Build Events tab
- klikt u op de Bewerken pre-build of post-build bewerken knop, ofwel is prima
- in het venster dat verschijnt, klikt u op de Macro -knop
- scroll naar beneden in de lijst totdat u vinden
ProjectDirin het volgende venster is de actuele waarde
Ook, in plaats van de pre-build evenement in het project, kunt u de kassa als BeforeBuild-target commando toe te voegen. Op die manier kan niemand accidentially verwijderen als ze zetten iets in pre-build in project-settings.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>