Visual Studio è andato bene: errore “Il nome della directory non è valido” durante il tentativo di compilazione

Per qualche strana ragione, il mio Visual Studio 2008, quando provo a compilare un progetto C #, prova a scrivere l’output dell’eseguibile in una directory con lo stesso nome di un eseguibile, almeno sembra che questo sia ciò che implica il messaggio di errore. Dopo aver eseguito Compile in uno dei miei progetti, CSC.EXE segnala il seguente errore del compilatore:

Imansible scrivere sul file di output ‘D: \ Projects \ Examples \ StringBuilderVsString \ obj \ Release \ StringBuilderVsString.exe’ – ‘Il nome della directory non è valido.

Quando guardo dentro obj\Release o obj\Debug tutte le risorse intermedie, come StringBuilderVsString.pdb, sono scritte correttamente in quella directory. Non ci sono spazi nella directory. L’errore si verifica anche quando si esegue csc.exe dal prompt dei comandi.

Quando si esegue Process Monitor, vedo SUCCESS solo per i file a cui accede csc.exe e non vedo alcun interrogare o scrivere in posizioni che non esistono.

Qualsiasi idea su come affrontarlo è gradita.

Risolto! Grazie per l’input, intanto ho trovato una soluzione. La causa è rara, ma potrebbe accadere ad altri, quindi ho deciso di rispondere alla mia domanda qui:

Causa

Percorso %TEMP% errato o inaccessibile o percorso %USERPROFILE% inaccessibile.

Avevo spostato questi percorsi su un’unità SSD più veloce per accelerare la compilazione. L’unità si è bloccata e il sistema operativo non lo ha più trovato (come riportato su ServerFault qui ) e di conseguenza, le posizioni spostate (cache di Internet, i miei documenti e temp) erano diventate inaccessibili.

L’errore citato da Visual Studio è fuorviante: non ha nulla a che fare con il nome del file (mentre mi sto ancora chiedendo perché stava interrogando l’eseguibile come una directory), l’errore riguardava il fatto che la posizione% TEMP% fosse errata.

Soluzione

Correggere le variabili di ambiente %USERPROFILE% o %TEMP% , (nel caso in cui l’avessi dimenticato, è qui: Sistema> Avanzate> Variabili d’ambiente ).

Nota: l’impostazione TEMP tipica e predefinita consiste nell’utilizzare la variabile di ambiente USERPROFILE come predefinita %USERPROFILE%\AppData\Local\Temp . Funziona, ma solo se nel Registro di sistema, la chiave in HKCU\Environment\TEMP è del tipo REG_EXPAND_SZ e non REG_SZ .

Assicurati di avere abbastanza spazio libero nel tuo disco, ho riscontrato lo stesso problema, l’ho risolto dopo aver assegnato più spazio libero.

Avevo anche un errore simile Imansible scrivere sul file di output ‘……………………..’ – ‘Il nome della directory non è valido. ‘

Ho provato a eliminare la cartella, modificando le variabili di ambiente come suggerito sopra (vale a dire% USERPROFILE% o% TEMP%), ma nulla sembrava funzionare. Quando ho nuovamente esaminato l’output nel riquadro di output / finestra in VS 2008, ho trovato la seguente riga

“c: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets (3397,13): errore MSB6003: imansible eseguire il file eseguibile dell’attività specificato” cmd.exe “. Imansible trovare il percorso della directory: C: \ Users Administrator \ AppData \ Local \ Temp \ 2 \ \”

Questa linea mi ha portato alla soluzione. Ho appena creato la cartella 2 non esistente nella cartella “C: \ Users \ Administrator \ AppData \ Local \ Temp”.

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

A proposito, l’abbiamo notato solo su tutte le nostre istanze Cloud. Qualcosa che ha a che fare con la virualizzazione? .. non lo so davvero