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

StackOverflow https://stackoverflow.com/questions/892195

  •  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 &quot;$(SolutionRoot)&quot;." />   
  <CreateItem Include="$(SolutionRoot)\**\*.js">
    <Output TaskParameter="Include" ItemName="JsFiles"/>
  </CreateItem>
  <Attrib Files="@(JsFiles)" ReadOnly="false"/>
  <JSCompress Files="@(JsFiles)" />
</Target>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top