Свойство OverwriteReadOnlyFiles, ошибка MSB3021

#tfs #msbuild #tfsbuild

#tfs #msbuild #tfsbuild

Вопрос:

это проблема, с которой я сталкиваюсь :

Сообщение об ошибке

 error MSB3021: Unable to copy file "<filename>" to "<output location>". Access to the path '<output location>' is denied
  

возникает, когда задача копирования MSBuild не может перезаписать существующий файл, доступный только для чтения.

Обычно при командной сборке эта ошибка возникает, потому что (а) в MSBuild, по-видимому, существует проблема, из-за которой один и тот же файл может быть включен более одного раза в список файлов для копирования, и (б) эти файлы обычно будут доступны только для чтения при командной сборке, поскольку они извлекаются изконтроль версий (и не проверен). Способы решения проблемы зависят от используемой версии Team Build (и MSBuild).

я нашел это решение:

Team Build 2008 / MSBuild 3.5
В MSBuild 3.5 было добавлено свойство OverwriteReadOnlyFiles, для которого можно установить значение true, чтобы разрешить задачам копирования, участвующим в процессе сборки, перезаписывать файлы, доступные только для чтения, в случаях, подобных описанному здесь . Таким образом, в Team Build 2008 / MSBuild 3.5 возможен третий обходной путь. Обратите внимание, что этот обходной путь будет работать только для проектов, использующих версию Microsoft.Common.targets версии 3.5 — из-за функции множественного таргетинга, доступной в MSBuild, это не обязательно будет каждый проект, созданный Team Build 2008.

Чтобы глобально присвоить свойству OverwriteReadOnlyFiles значение true, вы можете либо:

Добавьте текст «/p:OverwriteReadOnlyFiles =true» в файл TFSBuild.rsp для определения сборки или добавьте следующую группу свойств в файл TFSBuild.proj для определения сборки.

 <PropertyGroup>
  <CustomPropertiesForBuild>OverwriteReadOnlyFiles=true</CustomPropertiesForBuild>
</PropertyGroup>
  

Может кто-нибудь подсказать мне, как реализовать это решение в TFS 2010 в моей сборке?

я не знаю, где :

TFSBuild.rsp

или

TFSBuild.proj

находятся и как я могу добавить упомянутые предложения

Комментарии:

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

Ответ №1:

TFSBuild значительно изменился в TFS 2010, он больше не основан на MSBuild и вместо этого основан на рабочем процессе. Файла TFSBuild.proj больше нет.

Если вы пытаетесь перезаписать файлы, доступные только для чтения, возможно, вы делаете что-то, что не соответствует рекомендациям (как упоминал MrHinsh в комментариях). Если вы уверены, что то, что вы делаете, подходит, вам нужно либо отключить флаг только для чтения, либо использовать метод копирования, который может игнорировать флаг только для чтения.