Недавно я загрузил и установил Visual Studio Professional 2015 (14.0.23107.0). В первый раз, когда я открыл свое решение (28 проектов) и выполнил Build → Rebuild Solution, моя машина разработки полностью обходилась. CPU был максимальным на 100%, а сборка никогда не завершалась - даже после > 10 минут.
Я открыл Диспетчер задач Windows и заметил: > 10 запущенных задач VBCSCompiler.exe. В сочетании эти задачи отправили CPU > 90%.
Любая идея, почему существует так много этих задач? Любой способ остановить это?
Это самая близкая вещь, которую я могу найти, чтобы кто-то другой столкнулся с одной и той же проблемой: https://github.com/dotnet/roslyn/issues/2790
Обновление (8/7)
-Аванс, великая мысль. Мой менеджер предоставил мне этот выпуск (14.0.23107.0). Это правильная версия для "официального релиза"? Я не сознательно установил ни одну из версий релиза Visual Studio 2015. Я не думаю, что есть какие-то бета-версии.
-Kyle Trauberman, я не знаком с переменными окружения в контексте Visual Studio; однако я наивно побежал set DisableRosyln=true
в окне командной строки VS (и MSBuild). Это, похоже, не оказало никакого влияния. VBCSCompiler.exe показал правильную резервную копию даже после перезапуска VS2015.
Я восстановил установку VS2015 и выполнил перезагрузку. Это не помогло.
Обновить часть 2 (8/7) -Харанс, очень впечатляюще писать! Хотя на этот раз проблема не произошла, я взглянул на то, что вы описали:
Что касается модулей, загружаемых VBCSCompiler.exe, вот что у меня есть:
Интересно, что наши сборки ядра .NET находятся в разных версиях. Вы на 4.06.79, а я на 4.06.81.
Мои "клиентские DLL файлы" (расположенные в папке C:\Program Files (x86)\MSBuild\14.0\Bin\Microsoft.Build.Tasks.CodeAnalysis.dll) имеют ту же версию и метку времени, что и ваши:
Как ни странно, когда я смотрю на код в ILSpy, я вижу что-то немного другое - возможно, оптимизация?
private static NamedPipeClientStream TryAllProcesses(string pipeName, int timeoutMs, CancellationToken cancellationToken, out string newPipeName)
{
string str = pipeName;
int num = 1;
while (File.Exists(string.Format("\\\\.\\pipe\\{0}", pipeName)))
{
NamedPipeClientStream result;
if ((result = BuildClient.TryConnectToProcess(pipeName, timeoutMs, cancellationToken)) != null)
{
newPipeName = pipeName;
return result;
}
pipeName = str + "." + num.ToString(CultureInfo.InvariantCulture);
num++;
}
newPipeName = pipeName;
return null;
}
** Позвольте мне вернуться с вами к конкретному аргументу pipname, переданному экземплярам VBCSCompiler.exe. Я должен буду ждать, пока это не повторится.