Visual Studio ушел в тупик: ошибка «Имя каталога неверно» при попытке компиляции - PullRequest
10 голосов
/ 03 августа 2010

По какой-то очень странной причине, моя Visual Studio 2008, пытаясь скомпилировать проект C #, пытается записать вывод исполняемого файла в каталог с тем же именем, что и исполняемый файл, по крайней мере, кажется, что в этом ошибка сообщение подразумевает. После запуска Compile на любом из моих проектов CSC.EXE сообщает о следующей ошибке компилятора:

Не удалось записать в выходной файл 'D: \ Projects \ Примеры \ StringBuilderVsString \ OBJ \ Release \ StringBuilderVsString.exe' - «Имя каталога недействительно. «

Когда я заглядываю внутрь obj\Release или obj\Debug, все промежуточные ресурсы, такие как StringBuilderVsString.pdb, правильно записываются в этот каталог. В каталоге нет пробелов. Ошибка происходит также при запуске csc.exe из командной строки.

При запуске Process Monitor я вижу SUCCESS только для файлов, к которым обращается csc.exe, и не вижу запросов или записей в несуществующие местоположения.

Любые идеи по решению этой проблемы приветствуются.

Ответы [ 3 ]

13 голосов
/ 03 августа 2010

Решено! Спасибо за вклад, я тем временем нашел решение. Причина редкая, но может случиться и с другими, поэтому я решил ответить на свой вопрос здесь:

Причина

Неправильное или недоступное %TEMP% местоположение или недоступный %USERPROFILE% путь.

Я переместил эти пути на более быстрый SSD-диск, чтобы ускорить компиляцию. Диск вышел из строя, и операционная система больше его не нашла (как сообщалось на ServerFault здесь ), и, следовательно, перемещенные местоположения (кэш-память в Интернете, мои документы и временные данные) стали недоступными.

Ошибка, упомянутая Visual Studio, вводит в заблуждение: она не имеет ничего общего с именем файла (хотя мне все еще интересно, почему он запрашивает исполняемый файл как каталог), ошибка была связана с расположением% TEMP% быть плохим.

Решение

Исправьте переменные окружения %USERPROFILE% или %TEMP%, (если вы забыли, это здесь: Система> Дополнительно> Переменные окружения ).

Примечание. Типичная настройка TEMP по умолчанию - использовать переменную среды USERPROFILE, как в стандартной настройке %USERPROFILE%\AppData\Local\Temp. Это работает, но только если в реестре ключ под HKCU\Environment\TEMP имеет тип REG_EXPAND_SZ, а не REG_SZ.

1 голос
/ 01 февраля 2018

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

0 голосов
/ 27 августа 2011

Я также получаю похожую ошибку Не удалось записать в выходной файл '..........................' - «Имя каталога недействительно. «

Я попытался удалить папку, изменив переменные окружения, как предложено выше (то есть% USERPROFILE% или% TEMP%), но ничего не помогло. Когда я снова посмотрел на вывод в области вывода / окне в VS 2008, я обнаружил следующую строку

"C: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets (3397,13): ошибка MSB6003: не удалось выполнить указанный исполняемый файл задачи «cmd.exe» запустить. Не удалось найти путь к каталогу: C: \ Users \ Administrator \ AppData \ Local \ Temp \ 2 \ "

Эта строка привела меня к решению. Я только что создал несуществующую папку 2 в папке «C: \ Users \ Administrator \ AppData \ Local \ Temp».

%USERPROFILE% = C:\Users\Administrator\AppData\Local\Temp

Кстати, мы заметили это только на всех наших экземплярах Cloud. Что-то делать с виртуализацией? .. Не знаю, на самом деле

...