Проверка файла (TFS) на наличие действия перед сборкой
Я добавил действие предварительной сборки для ASP.NET проект web control (серверный контроль), который запускает jsmin.exe на наборе файлов Javascript. Эти выходные файлы являются частью дерева управления версиями и встроены в сборку.
Проблема в том, что при выполнении предварительной сборки jsmin не может записать файл, так как он доступен только для чтения. Можно ли проверить файл перед раздачей? Или я вынужден задать атрибуты файла в командной строке.
Любое улучшенное решение проблемы является добро пожаловать.
Обновление Один маленький вопрос с ответом Мехмета-вам нужно добавить каталог VS:
"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile"
2 ответа:
Если вы используете 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>