Problemă:
Dacă adăugați generate * .js la TFS, apoi TFS le- a scrie protejează, dacă le check - in, sau nu le verifica afară. Deci , dacă schimbați fișierul * TS, acesta nu poate genera fișierul * .js, deoarece fișierul este protejat la scriere.
==> Eroare
Dar dacă nu le face check - in, fișierul * .js vor lipsi , dacă aveți o implementați.
==> compilează, dar Runtime eroare De
asemenea, dacă aveți nevoie de ea ca o resursă încorporat, nu puteți exclude fișierul ...
Problemă suplimentară 1:
Dacă executați „Rebuild Solution“, Visual Studio vrea să ștergeți * .js generate de typescript, înainte de a executa construi.
Dar ștergerea nu este posibilă, deoarece fișierele * .js sunt protejate la scriere ...
==> Eroare
Problemă suplimentară 2:
Din moment ce nu este curat „Build“, pre-construi evenimente nu sunt executate pe curat ...
Deci , dacă eliminați protecția la scriere pe pre-constructie, va funcționa dacă nu „construi“, dar va eșua dacă alegeți „Rebuild“, indiferent dacă o faci în soluție sau în proiect.
Problemă suplimentară 3:
Nu puteți defini o comandă eveniment de pre-curat în editorul de proiect-setări.
Deci, iată ce puteți face:
Run attrib -r /s(Îndepărtează scrie protecție) pe typescripted dvs. * .js ca o acțiune de pre-build.
de exemplu
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
Aceasta funcționează, deoarece * este extins:
- Dacă fișierul nu există, nu există nici o eroare, pentru că nu se poate executa.
- Dacă fișierul nu există, nu există nici o eroare, comanda este executată.
Dacă aș rula pe un nume de fișier, acesta ar eșua în cazul în care fișierul nu există.
Acum, trebuie să editați fișierul proiectului (* .csproj) de mână, pentru a adăuga o acțiune de pre-curat.
Acțiunea de pre-curată este aceeași ca acțiunea de pre-construcție.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
Și acolo te duci. Acum puteți verifica fișierele * .js in, se pot edita fișierul * TS (va trebui să deproteja * .js, sau de a rula construi ulterior)
Dacă doriți să-l rula pe o bază per fișier, comanda este:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
sau în format XML formă:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
Și în loc de a scoate read-only atribut en-gros în acțiunea de pre-construi, puteți verifica, de asemenea, fișierele individuale cu instrumentul TFS linie de comandă:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
Apropo, puteți găsi o listă de macro - uri VisualStudio / MSBuild aici:
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= vs 2017
Și pentru a afla valoarea reală a macro:
- faceți clic dreapta pe proiectul în Solution Explorer, selectați Proprietăți
- selectați Build Evenimente fila
- faceți clic pe Editare pre-build sau Edit post-build buton, fie este bine
- în fereastra care apare, faceți clic pe Macrocomenzi butonul
- derulați în jos lista până când găsiți
ProjectDir, în următorul panou este valoarea sa reală
De asemenea, în loc de a folosi evenimentul de pre-construi în proiect, puteți adăuga Checkout comanda BeforeBuild-țintă. În acest fel, nimeni nu se poate elimina accidentially dacă au pus ceva în pre-construi în proiecte-setări.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>