代码之家  ›  专栏  ›  技术社区  ›  Tony_Henrich

Microsoft.Build.utilities.FileTracker引发异常错误。在不同的项目中发生

  •  9
  • Tony_Henrich  · 技术社区  · 14 年前

    最近,在Win7 64位的Visual Studio 2010 Ultimate中,我在编译任何项目时都会得到下面的错误。解决方法是增加 <TrackFileAccess>false</TrackFileAccess> 到项目文件。如果我没有弄错,这将禁用增量构建,因此我希望远离这个变通方法。

    谁知道永久可靠的修复方法是什么?我确实重新安装了.NET Framework 4和VS 2010。我没有4.0框架文件夹的测试版或早期版本。

    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 
    
    4 回复  |  直到 11 年前
        1
  •  21
  •   Harald    14 年前

    我通过反射windows\microsoft.net\framework\v4.0.30319\microsoft.build.utilities.v4.0.dll找到了适合我的环境的解决方案

    我的temp/tmp环境变量指向一个RAM驱动器根文件夹(t:\),没有任何进一步的目录嵌套! 这个 行s_temppath=path.getdirectoryname(path.gettemppath()); 在microsoft.build.utilities.filetracker的静态ctor中,结果为空,这导致了您提到的异常。

    现在,我的temp/tmp环境变量指向t:\temp,一切正常。

        2
  •  2
  •   BlueM    11 年前

    老问题,但我希望它能帮助那些谷歌搜索它的人。它不完全是由微软跟踪的错误引起的原始问题中的nullRef,但我想分享它。

    在构建C++项目时,我遇到了严重的问题,这些问题是由临时环境变量(可以在路径名称中包含空格)引起的。

    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()
    

    将温度和TMP更改为:

    %USERPROFILE%\Appdata\Local\Temp
    

    解决了它。

        3
  •  1
  •   Jayoscar    13 年前

    这个问题有可能是由注册表清理(如ccleaner 3.x版本)引起的,在我执行它之后,vs2010开始抛出这个filetracker问题,我很确定这不是由其他操作引起的。

    解决方案,我检查了文件是否在c:\windows\microsoft.net\framework\v4.0.30319中存在,filetracker仍然存在,然后我检查了是否有多个4.0.xxx文件夹存在?答案是否定的。

    所以我确认这不是VS问题,这是由于不正确的清理过程导致的注册表损坏。

    下载完整版本的.NET 4.0框架并重新安装,选择“修复”。 重新启动电脑,现在你的虚拟机应该可以工作了。

    我的观点是,因为在发生这个事件之前,您也不会对您的公共目标文件进行任何修改。

        4
  •  0
  •   Mitch Wheat    14 年前

    此解决方案来自 MS forums :

    编辑项目文件并将其添加到 第一个属性组:

    <GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>