使用Visual Studio 2010時,編譯出錯“CL”任務意外失敗,後來在網上查詢,很多人認為是使用了RamDisk(記憶體盤)作為臨時資料夾的原因,經過試驗,發現並非此原因,現在已可以同時使用VS2010和RamDisk。
工具/原料
電腦,VS2010,RamDisk
步驟/方法
程式編譯時出現類似以下錯誤(“CL”任務意外失敗):
1> ------ 已啟動生成: 專案: zzz, 配置: Debug Win32 ------
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: “CL”任務意外失敗。
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: System.TypeInitializationException: “Microsoft.Build.Utilities.FileTracker”的型別初始值設定項引發異常。 ---> System.NullReferenceException: 未將物件引用設定到物件的例項。
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: 在 Microsoft.Build.Utilities.FileTracker..cctor()
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: --- 內部異常堆疊跟蹤的結尾 ---
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: 在 Microsoft.Build.Utilities.FileTracker.GetTrackerPath(ExecutableType toolType, String rootPath)
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: 在 Microsoft.Build.CPPTasks.TrackedVCToolTask.TrackerExecuteTool(String pathToTool, String responseFileCommands, String commandLineCommands)
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: 在 Microsoft.Build.CPPTasks.CL.ExecuteTool(String pathToTool, String responseFileCommands, String commandLineCommands)
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: 在 Microsoft.Build.Utilities.ToolTask.Execute()
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: 在 Microsoft.Build.CPPTasks.TrackedVCToolTask.Execute()
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
1> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB4018: 在 Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)
========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========
有人認為是使用了RamDisk的原因,實際上原因在於,使用RamDisk時,很多人設定系統臨時檔案變數指向了RamDisk分割槽的根目錄(如“K:\”)而出錯。如果單獨分個硬碟分割槽,系統臨時檔案變數指向根目錄,也會出現這種情況。
解決此問題,只需將系統臨時檔案變數改為非根目錄(如“K:\Temp”):右擊計算機,屬性
高階系統設定。
點選“環境變數”按鈕。
修改TEMP、TMP等為RamDisk中的資料夾,如T:\Temp。
開啟記事本,輸入如下程式碼:
--------------------分割線-------------------------
if not exist K:\Temp md K:\Temp
--------------------分割線-------------------------
其中K:\Temp為你設定的臨時資料夾(如果路徑中包含空格,需要加英文狀態下的引號,如:"K:\Temp Files")。
然後將其儲存為副檔名為".bat"的檔案,如"Tmp.bat",再複製到開始選單-程式-啟動中(可以直接拖動到開始選單,或者右擊“啟動”,點選“開啟”),每次登陸時即可自動建立臨時資料夾。
由於RAMDISK容量較小,有時WinRAR解壓較大檔案時會提示臨時儲存空間不夠,可以這樣解決:開啟WinRAR,選項,設定。
切換到“路徑”選項卡。將“臨時檔案解壓的資料夾”修改到其他有足夠剩餘空間的分割槽即可。