2010-07-11 3 views
9

Ultimamente con Visual Studio 2010 Ultimate, C#, in Win7 64bit, ottengo l'errore sotto quando compilo qualsiasi progetto. La soluzione alternativa è aggiungere <TrackFileAccess>false</TrackFileAccess> al file di progetto. Se non sbaglio questo disabiliterà le build incrementali, quindi voglio stare lontano da questa soluzione alternativa.Microsoft.Build.Utilities.FileTracker ha generato un errore di eccezione. Succede con diversi progetti

Qualcuno sa qual è la correzione affidabile permanente? Ho reinstallato .NET Framework 4 e VS 2010. Non ho versioni beta o precedenti di 4.0 framework folders.

Error 1 The "GenerateResource" task failed unexpectedly. 
System.TypeInitializationException: The type initializer for 'Microsoft.Build.Utilities.FileTracker' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object. 
    at Microsoft.Build.Utilities.FileTracker..cctor() 
    --- End of inner exception stack trace --- 
    at Microsoft.Build.Utilities.FileTracker.ForceOutOfProcTracking(ExecutableType toolType, String dllName, String cancelEventName) 
    at Microsoft.Build.Tasks.GenerateResource.Execute() 
    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext 

risposta

21

ho trovato la soluzione per il mio ambiente che riflette Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Build.Utilities.v4.0.dll

La mia variabile di ambiente TEMP/TMP puntava a una cartella radice dell'unità RAM (T: \) senza ulteriori annidamenti di directory! La riga s_tempPath = Path.GetDirectoryName (Path.GetTempPath()); nel ctor statico di Microsoft.Build.Utilities.FileTracker ha restituito null, che ha causato l'eccezione menzionata dall'utente.

Ora la mia variabile di ambiente TEMP/TMP punta a T: \ TEMP e tutto funziona correttamente.

+0

Eccellente investigazione! Ho avuto lo stesso problema. Ho avuto la DLL aperta in Reflector e stava iniziando ad andare oltre la classe FileTracker, quando ho visto il tuo post. – JustinB

+2

Grazie per la soluzione. Un piccolo bit: a volte ci sono MSBuild.exe bloccati dopo questa eccezione (anche dopo aver chiuso devenv.exe). Dovrebbero essere uccisi per risolvere il problema –

+0

Quasi 7 anni più tardi e questa soluzione funziona ancora con l'aggiornamento 4 di Visual Studio 2013 Community Edition. Sheesh. Grazie! –

0

Questa soluzione è dalla MS forums:

Modificare il file di progetto e aggiungere questo al primo PropertyGroup:

<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies> 
+1

Non ha aiutato. Il problema menzionato in questo post sembra essere diverso. –

1

C'è la possibilità che questo problema sia causato dalla pulizia del registro come la versione CCleaner 3.x, dopo che l'ho eseguita, il VS2010 inizia a lanciare questo problema di filetracker, sono abbastanza sicuro che questo non è causato da altre azioni.

Soluzione, ho controllato che il file esca o no all'interno di C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319, il Filetracker è ancora lì, quindi controllo ho più uscite 4.0.xxx per le cartelle? La risposta era no.

Quindi confermo che questo non è un problema di VS, è colpa del Registro di sistema causato da un processo di pulizia improprio.

SCARICA LA VERSIONE COMPLETA .net 4.0 Framework e installa nuovamente, scegli la riparazione. Riavvia il PC, ora il tuo VS dovrebbe tornare a lavorare ora.

Il mio punto qui è che, poiché prima si è verificato questo incidente, non si apportano modifiche al file di destinazione comune.

2

Vecchia domanda ma spero che possa aiutare qualcuno che lo cerca su Google. Non è esattamente il Nullref nella domanda originale che è stata causata dal bug tracciato da Microsoft ma voglio condividerlo.

Ho avuto seri problemi nella creazione di progetti C++ che ho rintracciato a causa delle variabili di ambiente Temp (che contengono opportunamente spazi nei nomi dei percorsi).

Unerwarteter Fehler bei der CL-Aufgabe. 
System.TypeInitializationException: Der Typeninitialisierer für "Microsoft.Build.Utilities.FileTracker" hat eine Ausnahme verursacht. ---> System.IO.FileNotFoundException: Das System kann die angegebene Datei nicht finden. (Ausnahme von HRESULT: 0x80070002) 
    bei System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) 
    bei System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode) 
    bei Microsoft.Build.Shared.NativeMethodsShared.ThrowExceptionForErrorCode(Int32 errorCode) 
    bei Microsoft.Build.Shared.NativeMethodsShared.GetLongFilePath(String path) 
    bei Microsoft.Build.Utilities.FileTracker..cctor() 
    --- Ende der internen Ausnahmestapelüberwachung --- 
    bei Microsoft.Build.CPPTasks.CL.ComputeOutOfDateSources() 
    bei Microsoft.Build.CPPTasks.TrackedVCToolTask.SkipTaskExecution() 
    bei Microsoft.Build.Utilities.ToolTask.Execute() 
    bei Microsoft.Build.CPPTasks.TrackedVCToolTask.Execute() 
    bei Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
    bei Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext() 

Modifica TEMP e TMP:

%USERPROFILE%\Appdata\Local\Temp 

risolto.

+0

Si noti che 'C: \ Utenti \ David \ Impostazioni locali \ Temp' non è uguale a' C: \ Users \ David \ AppData \ Local \ Temp'. Mentre possono collegarsi allo stesso posto tramite junction, si dà l'errore BlueM menziona e l'altro funziona correttamente (suggerimento: quello che BlueM elenca è la risposta giusta). –

Problemi correlati