For some very odd reason, my Visual Studio 2008, when trying to compile a C# project, tries to write the output of the executable to a directory with the same name as an executable, at least it seems that that's what the error message implies. After running Compile on any of my projects, CSC.EXE reports the following compiler error:
Could not write to output file 'D:\Projects\Examples\StringBuilderVsString\obj\Release\StringBuilderVsString.exe' -- 'The directory name is invalid. '
When I look inside obj\Release
or obj\Debug
all intermediate resources, like StringBuilderVsString.pdb are correctly written in that directory. There are no spaces in the directory. The error happens also when running csc.exe from the command prompt.
When running Process Monitor, I only see SUCCESS for files accessed by csc.exe and I don't see any querying or writing to locations that do no exist.
Any ideas on tackling this are welcome.
I was also getting a similar error Could not write to output file '..........................' -- 'The directory name is invalid. '
I tried deleting folder, changing Environment variables as suggested above (i.e. %USERPROFILE% or %TEMP%), but nothing seemed to work. When I again looked at the output in the Output Pane/Window in VS 2008, I found the following line
This line led me to the solution. I just created the non existing 2 folder in "C:\Users\Administrator\AppData\Local\Temp" folder.
By the way we noticed this only on all of our Cloud instances. Something do with virualization? .. Dont know really
Solved! Thanks for the input, I meanwhile found a solution. The cause is rare, but it may happen to others, so I decided to answer my own question here:
Cause
An incorrect or inaccessible
%TEMP%
location, or an inaccessible%USERPROFILE%
path.I had moved these paths to a faster SSD drive to speed up compiling. The drive crashed and the OS did not find it anymore (as reported on ServerFault here) and consequently, the moved locations (internet caches, my documents and temp) had become inaccessible.
The error mentioned by Visual Studio is misleading: it has nothing to do with the name of the file (while I'm still wondering why it was querying the executable as a directory), the error was about the %TEMP% location being bad.
Solution
Fix the
%USERPROFILE%
or%TEMP%
environment variables, (in case you forgot, it's here: System > Advanced > Environment Variables).Note: The typical and default TEMP setting is to use the USERPROFILE environment variable as in the default
%USERPROFILE%\AppData\Local\Temp
. This works, but only if in the registry, the key underHKCU\Environment\TEMP
is of the typeREG_EXPAND_SZ
and notREG_SZ
.Make sure that you have enough free space in your drive, I have experienced the same issue, got it resolved after allocating more free space.