Сбой MSBUILD с «Процесс не может получить доступ к файлу xxxxx, потому что он используется другим процессом». когда maxcpucount больше 1 - PullRequest
6 голосов
/ 27 июля 2011

Я пытаюсь улучшить время сборки, используя CruiseControl.NET и MSBUILD, и один из ключей командной строки, maxcpucount, может использоваться для обеспечения параллельной сборки. Наше решение имеет более 60 проектов, поэтому любое улучшение будет полезным. Однако всякий раз, когда я поднимаю значение maxcpucount выше единицы, у нас часто возникают сбои сборки из-за:

"Процесс не может получить доступ к файлу xxxx, потому что он используется другой процесс. MSBuild "

Похоже, что дополнительные параллельные потоки / процессы сборки блокируют друг друга.

Ответы [ 3 ]

3 голосов
/ 27 июля 2011

Я думаю, что нашел решение.Похоже, что если я добавлю параметр / nodeReuse: false, я не получу блокировки файлов.Похоже, что функция nodeReuse поддерживает процессы msbuild, и они зависят от блокировок файлов для последующих сборок.

http://msdn.microsoft.com/en-us/library/ms164311.aspx

2 голосов
/ 27 июля 2011

Вы строите из файла решения? Если это так, убедитесь, что вы используете прямые ссылки между проектами и не используете функцию зависимости проекта от решения. Если вы используете что-то и то, и другое, могут возникнуть проблемы. См. эту статью .

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

0 голосов
/ 27 июля 2011

Ваша сборка, вероятно, используется другой сборкой, которая собирается.Убедитесь, что каждая сборка собирается до того, как она понадобится другим сборкам

...