Visual Studio сошла с ума: ошибка «Недопустимое имя каталога» при попытке компиляции

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

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

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

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

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


person Abel    schedule 03.08.2010    source источник
comment
the double projFilename.exe is intentional почему?   -  person Codesleuth    schedule 03.08.2010
comment
Я думаю, он имеет в виду, что он написал это намеренно, но очевидно, что VS делает что-то не так, чтобы придумать это.   -  person Kent Boogaart    schedule 03.08.2010
comment
@Codesleuth: я имел в виду: я написал это, потому что именно туда Visual Studio пытается записать вывод. Он должен быть без второго имени, конечно, он вообще не должен пытаться записать вывод в каталог, совпадающий с именем выходного исполняемого файла. @Кент: точно   -  person Abel    schedule 03.08.2010
comment
Ах, попался. В этом случае опубликуйте файл .csproj; может просветить.   -  person Kirk Woll    schedule 03.08.2010
comment
@all: приведенные выше комментарии стали недействительными после того, как я обновил вопрос до более точного описания проблемы.   -  person Abel    schedule 15.09.2010


Ответы (5)


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

Причина

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

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

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

Решение

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

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

person Abel    schedule 03.08.2010
comment
У меня была такая же странная проблема, я не смог добавить файл .h (даже если он добавит файл .cpp) в мой проект VS2015 с той же ошибкой, и это также устранило мою проблему. У меня не было переменной среды USERPROFILE, я установил ее в c:\Users\‹My.Name›, и это исправило ее. - person zar; 25.11.2015

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

person Sukesh Chand    schedule 01.02.2018
comment
Хорошая точка зрения! Удивлен, что спустя столько лет такое все еще происходит. Вы сталкивались с этой ошибкой в ​​новейшей версии Visual Studio (например, 2017 г.)? - person Abel; 02.02.2018
comment
Да, такая же проблема возникла и у меня, решил ее после того, как выделил больше места на диске. - person Sukesh Chand; 03.02.2018

В моем случае это происходит, когда я пытаюсь добавить файл (Database.mdf) в папку (App_Data).

Решите это, добавив папку (App_Data) вручную перед добавлением файла (Database.mdf)

Это происходит, когда .sln регистрирует папку (поэтому она отображается в Visual Studio), хотя эта папка фактически не существует на диске.

person JeeShen Lee    schedule 20.01.2021

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

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

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

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

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

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

person user_v    schedule 26.08.2011
comment
Если я вас правильно понял, вы сначала указали %userprofile% на несуществующий каталог. Конечно, каталог, на который он указывает, должен существовать. Также возможно, что ваша ошибка возникает из-за задачи пост-/пре-компиляции, которая ожидает определенную папку, которая просто недоступна на всех машинах. Обычно папки под %temp% создаются процессом, который в них нуждается (поскольку он никогда не может быть уверен, что они будут там в следующий раз). - person Abel; 29.08.2011
comment
Я не указываю %userprofile% на несуществующий каталог. %userprofile% уже указывал на несуществующий каталог. Задача пост-компиляции существовала всегда, но однажды сборка начала давать сбой. Если пост-компиляция является проблемой, почему ошибка появляется в начале первого шага в окне вывода при сборке? На этапе после компиляции выполняется сжатие CSS и JS с использованием MSBuild и Yahoo.Yui.Compressor. - person user_v; 01.09.2011
comment
Хм, боюсь, я недостаточно понимаю вашу ситуацию, чтобы дать вам четкий ответ на эти вопросы. Подумайте о том, чтобы задать вопрос. в SO для вашей конкретной ситуации (если вы не считаете, что она уже решена в соответствии с вашим дополнительным ответом в этой теме). - person Abel; 01.09.2011

Переместите этот файл в другое место, а затем попробуйте запустить его. У меня это сработало.

person Omkar Rajale    schedule 14.01.2021
comment
на этот вопрос уже есть принятый ответ. это могло сработать для вас, но вам не хватает огромного количества деталей, которые уже дал существующий ответ. - person Jad; 14.01.2021