Problem:
Jeśli dodać wygenerowane * .js pliki do TFS, TFS następnie zapisem chroni je, jeśli ich sprawdzenia, czy nie można ich sprawdzić. Więc jeśli zmienić plik * .TS, nie może wygenerować plik * .js, ponieważ plik jest zabezpieczony przed zapisem.
==> Błąd
Ale jeśli nie sprawdzić je, i * js plik będzie brakować, jeśli uruchomić wdrożyć.
==> Błąd kompiluje ale Runtime
Również, jeśli jest to potrzebne jako osadzonego zasobu, nie można wykluczyć plik ...
Dodatkowym problemem 1:
Po uruchomieniu „Rebuild rozwiązanie”, Visual Studio chce usunąć * .js pliki generowane przez maszynopis, zanim wykona budować.
Ale usuwanie nie jest możliwe, ponieważ * .js są zabezpieczone przed zapisem ...
==> Błąd
Dodatkowym problemem 2:
Ponieważ nie jest czysty „Build”, wstępnie zbudować zdarzenia nie są wykonywane na czysty ...
Więc jeśli usunąć ochronę przed zapisem na pre-produkcji, to będzie działać, jeśli nie „budować”, ale go nie powiedzie się, jeśli wybierzesz „Rebuild”, niezależnie od tego, czy robisz to w roztworze lub w projekcie.
Dodatkowym problemem 3:
Nie można zdefiniować polecenie wstępnie oczyszczone w edytorze zdarzeń project-settings.
Tak więc, oto co można zrobić:
Run attrib -r /s(usuwa zabezpieczenie przed zapisem) na własną typescripted * .js jako pre-build działania.
na przykład
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
To działa, ponieważ * jest rozszerzony:
- Jeśli plik nie istnieje, nie ma błędu, ponieważ nie komenda jest wykonywana.
- Jeśli plik nie istnieje, nie ma błędu, komenda jest wykonywana.
Jeśli chcesz uruchomić go w pliku, to nie uda, jeśli plik nie istnieje.
Teraz trzeba edytować plik projektu (* .csproj) ręcznie, aby dodać pre-czyste działanie.
Wstępnie czyste działanie jest takie samo jak działanie pre-build.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
I nie udać. Teraz możesz sprawdzić pliki * .js, można edytować plik * .TS (trzeba usunąć zabezpieczenie plik * .js lub uruchomić build potem)
Jeśli chcesz, aby uruchomić go na każdego pliku, polecenie to:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
lub w postaci XML:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
I zamiast usuwania atrybut tylko do odczytu hurtowego w akcji pre-build, można również sprawdzić pojedynczych plików za pomocą narzędzia wiersza polecenia TFS:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
Nawiasem mówiąc, można znaleźć listę makr VisualStudio / msbuild tutaj:
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= vS 2017
I dowiedzieć się rzeczywistą wartość makra:
- kliknij prawym przyciskiem myszy projektu w Solution Explorer, wybierz Właściwości
- wybierz Zbuduj pakietowe kartę
- kliknij Edycja Gotowy lub Edytuj post-build przycisk, albo jest w porządku
- W oknie, które się pojawi, kliknij Makra przycisk
- przewinąć listę w dół, aż znajdziesz
ProjectDirw następnym okienku jest jego rzeczywista wartość
Ponadto, zamiast korzystać z pre-build zdarzenie w projekcie, można dodać kasę jako polecenia BeforeBuild-docelowego. W ten sposób nikt nie może go usunąć przypadkowym ruchom jeśli włożyli coś do wstępnego projektu budowy w ustawieniach.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>