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