Problemy z maszynopis i TFS

głosy
10

Nie ma chyba problem z TFS projektu Visual Studio prowadzone wspólnie z maszynopis.

Nadmierne TSC nie może nadpisać plik readonly js rzuca Permission denied błąd.

Error   1   Permission denied   
Error   2   The command C:\Program Files (x86)\Microsoft SDKs\TypeScript\0.8.0.0\tsc 
c:\users\schlicht\documents\visual studio 2012\Projects\TypeScriptHTMLApp1\TypeScriptHTMLApp1\app.ts exited with code 1. 

Czy to możliwe, bez wyraźnie sprawdzanie plików w użyciu kompilacji z TSC?

Utwórz 08/10/2012 o 11:30
źródło użytkownik
W innych językach...                            


7 odpowiedzi

głosy
7

Nie sprawdzić w pliku .js. Używamy tego podejścia w naszym projekcie maszynopis i to działa dobrze. Nie ma potrzeby, aby mieć wygenerowane .js w kontroli źródła; myśleć o plikach .js jako wyjście projektu, jak .exe lub .dll.

Odpowiedział 14/10/2012 o 02:59
źródło użytkownik

głosy
4

Teraz, jeśli serwer jest skonfigurowany do budowania biegu maszynopis, TSC będzie działać i generować pliki JavaScript.

Oto kolejny alternatywne rozwiązanie, w przypadku, gdy nie chcesz, aby usunąć plik JS. Ponieważ, jeśli usunąć JS do chwili obecnej, a każda inna kontrola deweloper w tych plików ponownie do TFS, ten sam błąd przyjdzie wystąpić. (Więcej ponad to są ukryte pliki, więc jeśli nie zameldowania ostrożnie, mogą być sprawdzane w w TFS)

W tym przypadku, można uruchomić zdarzenia Pre-Build, który usunie wszystkie atrybuty tylko do odczytu plików JS dla tego projektu.

1. Kliknij prawym przyciskiem myszy na projekt i otwórz okno właściwości projektu

2. Wybierz Budowa Event Tab

wprowadzić opis obrazu tutaj

Zapewni to, cały plik JS uwolnienie Tylko do odczytu atrybutów i nie będzie żadnego błędu Zapis do pliku nie powiodło się.

Mam nadzieję że to pomoże.

Źródło: http://dailydotnettips.com/2014/05/03/typescript-emit-error-write-to-file-failed-how-to-resolve

Odpowiedział 28/11/2015 o 06:05
źródło użytkownik

głosy
1

Oto obejście: Aby zachować swoje pliki JS jako część projektu i kontroli źródła.

Użyj lokalnego obszaru roboczego, ponieważ nie stosuje się tylko do odczytu flagi na plikach, więc zapisywania plików js nie wymagają wymeldowanie na to, aby zostać zapisane.

Znalazłem to, bo nie wykazując tego problemu, ale inni w moim zespole były, więc po pewnym kopania I okazało się, co było inaczej. I był przy użyciu lokalnego Workspace zamiast Workspace Server.

Pozostali członkowie zespołu są konwertowane do lokalnego obszaru roboczego i są gładko po raz kolejny.

Odpowiedział 18/07/2013 o 11:30
źródło użytkownik

głosy
1

Jest to znany bug (lub brakujące funkcja):

http://typescript.codeplex.com/workitem/108

Odpowiedział 08/10/2012 o 14:52
źródło użytkownik

głosy
0

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 &quot;$(ProjectDir)Resources/Scripts/0/*.js&quot;" />
  </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 &quot;$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js&quot; (&#xD;&#xA;attrib -r &quot;$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js&quot;&#xD;&#xA;)" />

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="&quot;$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe&quot; checkout /lock:none &quot;$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js&quot;" />
  </Target>
Odpowiedział 06/02/2019 o 13:09
źródło użytkownik

głosy
0

W odpowiedzi na ludzi sugerujących wyłączenie .js pliki z projektem, muszę powiedzieć, że to może działać tylko w małych i jednego oprogramowania rozwiązania. W wielkim aplikacji tj ERP, tam zwykle istnieje wiele rozwiązań na moduł, a gdy każdy ma plików .js dla siebie, zapewniając .js i innych plików źródłowych tego rodzaju jest zwykle poprzez ich „zasobami Embedded” i jakiś zwyczaj wirtualny operator ścieżki czy coś.

Więc, co działa? To rozwiązanie może pomóc, proponuję spróbować.

Ale tak czy inaczej, jak wspomniano AM. Jest to znany błąd. I myślę, że najlepszym rozwiązaniem dla maszynopis kompilator byłoby pominąć pliki .js za pisanie tych plików .TS że są tylko do odczytu (zaznaczone-in) sami.

Odpowiedział 06/07/2015 o 06:14
źródło użytkownik

głosy
0

Ja doświadczyłem tego wczoraj.

Jak stwierdzono Iano, nie należy dodawać wygenerowane Js TFS; lub dodaj tf checkouti tf checkindo celu BeforeBuild.

Odpowiedział 20/11/2012 o 13:43
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more