Problém:
Pokud přidáte generované * JS soubory TFS, pak TFS zápis chrání, pokud je zkontrolovat, nebo nekontrolují ven. Takže pokud změníte .TS soubor *, nemůže generovat * JS soubor, protože soubor je chráněn proti zápisu.
==> Error
Ale pokud nechcete kontrolovat je in, bude * JS soubor chybí, pokud se dostanete nasazení.
==> error Sestavuje, ale Runtime
Také, pokud ji budete potřebovat jako vložený prostředek, nelze vyloučit soubor ...
Další problém 1:
Pokud spustíte „Znovu vytvořit řešení“, Visual Studio chce odstranit * JS soubory vytvořené strojopisu, před spuštěním stavět.
Ale mazání není možné, protože soubor * js soubory jsou chráněna proti zápisu ...
==> Error
Dalším problémem 2:
Vzhledem k tomu, čistý není „Build“, pre-build události nejsou prováděny na čistý ...
Takže pokud jste odstranit ochranu proti zápisu na pre-build, bude to fungovat, když to „stavět“, ale to se nezdaří, pokud zvolíte „Obnovit“, a to bez ohledu na to, zda se vám to v roztoku nebo v projektu.
Dalším problémem 3:
Nelze definovat předem čisté příkaz pro pořádání akcí v editoru projektově nastavení.
Takže, tady je to, co můžete udělat:
Run attrib -r /s(odstraňuje ochranu proti zápisu) na vlastní typescripted * JS soubory jako pre-build akci.
např
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
Tato metoda funguje, protože * expanduje:
- V případě, že soubor neexistuje, není žádná chyba, protože žádný příkaz je vykonán.
- V případě, že soubor neexistuje, není žádná chyba, je příkaz spuštěn.
Pokud ho už běží na jméno souboru, to by selhat, pokud neexistuje soubor.
Nyní je třeba upravit soubor projektu (* .csproj) rukou, přidejte předem čistou akci.
Předem čistá akce je stejná jako pre-build akci.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
A je to. Nyní si můžete zkontrolovat * JS soubory, můžete upravit .TS soubor * (budete muset zrušit ochranu * JS soubor nebo spustit sestavení později)
Chcete-li jej spustit na základě souboru za, je příkaz:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
nebo v XML podobě:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
A namísto odstranění atribut jen pro čtení velkoobchod v pre-build akci, můžete také zkontrolovat jednotlivé soubory se s nástrojem TFS příkazového řádku:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
Mimochodem, můžete najít seznam VisualStudio / MSBuild makra zde:
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= vs-2017
A zjistit skutečnou hodnotu makra:
- pravým tlačítkem myši na projekt v aplikaci Solution Explorer, zvolte Vlastnosti
- vyberte Build Events kartu
- klepněte na Edit pre-build nebo upravit post-build tlačítko, a to buď v pořádku
- V okně, které se objeví, klepněte na makra tlačítko
- Posun dolů v seznamu, dokud najdete
ProjectDirv příštím tabule je jeho skutečná hodnota
Také, namísto použití pre-build události v projektu, můžete přidat jako pokladna BeforeBuild-cílové velení. Tak nikdo nemůže náhodným odstranit jej v případě, že dát něco do pre-stavět v projektových nastaveních.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>