Problem:
Hvis du legger til de genererte * JS-filer til TFS, da TFS skrive-beskytter dem, hvis du sjekke dem inn, eller ikke sjekke dem ut. Så hvis du endrer * Ts-filen, kan det ikke generere * JS-fil, fordi filen er skrivebeskyttet.
==> Feil
Men hvis du ikke sjekke dem inn, vil * JS-fil mangle hvis du kjører distribuere.
==> kompilerer, men Runtime feil
også, hvis du trenger det som en integrert ressurs, du kan ikke utelukke fil ...
Tilleggs problem 1:
Hvis du kjører "Rebuild Solution", Visual Studio ønsker å slette * JS-filer generert av maskinskrevet manuskript, før den utfører bygge.
Men sletting er ikke mulig, fordi * JS filene er skrivebeskyttet ...
==> Feil
Tilleggs problem 2:
Siden ren er ikke "Build", pre-bygge hendelser er ikke utført på ren ...
Så hvis du fjerner skrivebeskyttelsen på pre-build, vil det fungere hvis du "bygge", men det vil mislykkes hvis du velger "Rebuild", uavhengig av om du gjør det i løsningen eller i prosjektet.
Tilleggs problem 3:
Du kan ikke definere en pre-ren hendelsen kommando i prosjektinnstillinger editor.
Så, her er hva du kan gjøre:
Kjør attrib -r /s(fjerner skrivebeskyttelse) på typescripted * JS-filer som pre-build handling.
f.eks
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
Dette fungerer, fordi * utvides:
- Hvis filen ikke finnes, er det ingen feil, fordi ingen kommando er utført.
- Hvis filen eksisterer, er det ingen feil, er kommandoen utført.
Hvis du vil kjøre den på et filnavn, ville det mislykkes hvis filen ikke eksisterer.
Nå må du redigere prosjektfilen (* .csproj) for hånd, for å legge en pre-ren handling.
Den pre-ren handling er den samme som den pre-build handling.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
Og der du går. Nå kan du sjekke * JS-filer i, kan redigere * ts filen (du må oppheve * JS-fil, eller kjøre bygge etterpå)
Hvis du ønsker å kjøre den på en per fil basis, er kommandoen:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
eller i XML-format:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
Og i stedet for å fjerne skrivebeskyttelsen engros i pre-build handling, kan du også sjekke de individuelle filene ut med TFS kommandolinjeverktøyet:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
Forresten, kan du finne en liste over Visual Studio / MSBuild makroer her:
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= vs-2017
Og for å finne ut den faktiske verdien av makroen:
- høyreklikk på prosjektet i Solution Explorer, velg Egenskaper
- velg Bygg Hendelser kategorien
- Klikk på Rediger pre-build eller Rediger post-build -knappen, enten er greit
- i vinduet som dukker opp, klikker du Makroer knappen
- bla nedover listen til du finner
ProjectDir, i det neste vinduet er den faktiske verdien
I stedet for å bruke pre-build hendelse i prosjektet, kan du legge den kassen som BeforeBuild-target-kommandoen. På den måten kan ingen feiltakelse fjerne det hvis de setter noe inn i pre-build i prosjektinnstillinger.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>