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

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

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

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

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

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

Ответы

Ответ 1

Если вы используете Team Foundation Server, вы можете использовать утилиту командной строки командной строки (tf.exe), чтобы проверить файл ( s) во время предварительной сборки, а затем проверить их во время пост-сборки. Если вы используете что-то еще для управления версиями, вы можете проверить, есть ли у них инструмент командной строки, например tf.exe.

Ответ 2

Если вы не хотите проверять файлы как часть сборки (что обычно не подходит для такого рода вещей), я бы просто установил атрибуты файлов .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>

Обратите внимание, что при изменении файлов после их получения могут возникнуть проблемы, если вы попытались перейти к инкрементной сборке.