Проверка файла (TFS) на наличие действия перед сборкой


Я добавил действие предварительной сборки для ASP.NET проект web control (серверный контроль), который запускает jsmin.exe на наборе файлов Javascript. Эти выходные файлы являются частью дерева управления версиями и встроены в сборку.

Проблема в том, что при выполнении предварительной сборки jsmin не может записать файл, так как он доступен только для чтения. Можно ли проверить файл перед раздачей? Или я вынужден задать атрибуты файла в командной строке.

Любое улучшенное решение проблемы является добро пожаловать.

Обновление Один маленький вопрос с ответом Мехмета-вам нужно добавить каталог VS:

"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile" 
2 15

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 &quot;$(SolutionRoot)&quot;." />   
  <CreateItem Include="$(SolutionRoot)\**\*.js">
    <Output TaskParameter="Include" ItemName="JsFiles"/>
  </CreateItem>
  <Attrib Files="@(JsFiles)" ReadOnly="false"/>
  <JSCompress Files="@(JsFiles)" />
</Target>
Обратите внимание, что изменение файлов после их получения может вызвать проблемы, если вы попытаетесь перейти на инкрементную сборку.