Проблема:
При добавлении сгенерированных * .js файлов в TFS, то TFS запись защищает их, если вы проверяете их, или не проверить их. Так что если вы измените * ts - файл, то он не может генерировать * .js файл, так как файл защищен от записи.
==> Ошибка
Но если вы не проверить их, * .js файл будет отсутствовать , если вы запустите развертывание.
==> Собирает, но Ошибка выполнения
Кроме того , если вам это нужно , как внедренный ресурс, вы не можете исключить файл ...
Дополнительная проблема 1:
При запуске «Rebuild Solution», Visual Studio хочет удалить * .js файлы , созданные машинопись, перед выполнением сборки.
Но удаление не представляется возможным, так как * .js файлы защищены от записи ...
==> Ошибка
Дополнительная проблема 2:
Так как чистый не является «Build», предварительно построить события, не выполняется на чистом ...
Так что если вы удалите защиту от записи на предварительной сборке, это будет работать , если вы «построить», но это потерпит неудачу , если вы выбираете «Перестройка», независимо от того, делаете ли вы его в растворе или в проекте.
Дополнительная проблема 3:
Вы не можете определить команду предварительной очистки событий в редакторе проекта Настройки.
Итак, вот что вы можете сделать:
Run attrib -r /s(снимает защиту от записи) на ваш typescripted * .js файлы в качестве предварительной сборки действия.
например
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
Это работает, потому что * расширен:
- Если файл не существует, нет никакой ошибки, потому что ни одна команда не будет выполнена.
- Если файл не существует, нет никакой ошибки, то команда выполняется.
Если вы хотите запустить его на имя файла, он потерпит неудачу, если файл не существует.
Теперь вам нужно отредактировать файл проекта (* .csproj) вручную, добавить предварительно чистую акцию.
Предварительно чистые действия такой же , как действие предварительной сборки.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
И там вы идете. Теперь вы можете проверить * .js файлы, может редактировать * ts-файл (вам нужно незащитил * .js файл или запустить сборку впоследствии)
Если вы хотите, чтобы запустить его на каждый файл, команда:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
или в XML-форме:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
И вместо того, чтобы извлекать только для чтения атрибутов оптом в действии до сборки, вы также можете проверить отдельные файлы с помощью инструмента TFS командной строки:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
Кстати, вы можете найти список VisualStudio / MSBuild макросов здесь:
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= VS-2017
А чтобы узнать фактическое значение макроса:
- щелкните правой кнопкой мыши на проект в обозревателе решений, выберите Свойства
- выберите Событие построения вкладки
- нажмите Edit предварительной сборки или Edit после сборки кнопки, либо в порядке
- в всплывающем окне, нажмите Макросы кнопку
- прокрутите список вниз , пока вы найдете
ProjectDirв следующей панелью является его фактическим значением
Кроме того, вместо того, чтобы использовать событие предварительно сборки в проекте, вы можете добавить проверку как BeforeBuild-целевой команды. Таким образом, никто не может accidentially удалить его, если они положить что-то в предварительную сборку в проекте-настройке.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>