Проверка файла (TFS) для выполнения действия предварительной сборки
-
23-08-2019 - |
Вопрос
Я добавил действие предварительной сборки для ASP.NET проекта web control (серверный элемент управления), который выполняется jsmin.exe с набором файлов Javascript.Эти выходные файлы являются частью дерева управления версиями и встроены в сборку.
Проблема в том, что при запуске предварительной сборки jsmin не может записать файл, поскольку он доступен только для чтения.Можно ли проверить файл перед раздачей?Или я вынужден устанавливать атрибуты файла в командной строке.
Любое улучшенное решение проблемы приветствуется.
Обновить Одна небольшая проблема с ответом Мехмета - вам нужно добавить каталог VS:
"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile"
Решение
Если вы используете Team Foundation Server, вы можете использовать утилита командной строки team foundation (tf.exe ) чтобы проверить файл (ы) во время предварительной сборки, а затем вернуть их обратно во время последующей сборки.Если вы используете что-то другое для управления версиями, вы можете проверить, есть ли у них инструмент командной строки, такой как tf.exe.
Другие советы
Если вы не хотите проверять файлы как часть сборки (чего вы обычно не делаете для подобных вещей), то я бы просто установил атрибуты файлов .js перед запуском jsmin для них.Самый простой способ настроить файлы, доступные для чтения и записи, - это использовать задачу Attrib, предоставляемую Расширения сообщества MSBuild.Те же расширения сообщества также предоставляют задачу JSCompress для простого вызова JSMin из MSBuild.
Следовательно, у вас будет что-то вроде следующего (не тестировалось):
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<!-- rest of TFSBuild.proj file -->
<Target Name="AfterGet">
<Message Text="Compressing Javascript files under "$(SolutionRoot)"." />
<CreateItem Include="$(SolutionRoot)\**\*.js">
<Output TaskParameter="Include" ItemName="JsFiles"/>
</CreateItem>
<Attrib Files="@(JsFiles)" ReadOnly="false"/>
<JSCompress Files="@(JsFiles)" />
</Target>
Обратите внимание, что изменение файлов после их получения вполне может вызвать проблемы, если вы попытаетесь перейти к инкрементной сборке.