2011-08-10 18 views
1

我們有一個應用程序,我們需要在Windows 7環境中開始測試和開發。它可以在VS2008的WinXP下正常編譯,沒問題。然而,當我去7機使用VS2008今天編譯它在Windows我得到以下錯誤:Windows 7編譯器問題:GDI中發生了一般性錯誤+

Error 12 The "GenerateResource" task failed unexpectedly. 
System.Runtime.InteropServices.ExternalException (0x80004005): A generic error occurred in GDI+. 
    at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) 
    at System.Drawing.Image.Save(MemoryStream stream) 
    at System.Drawing.Image.System.Runtime.Serialization.ISerializable.GetObjectData(SerializationInfo si, StreamingContext context) 
    at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder) 
    at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder) 
    at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) 
    at System.Resources.ResourceWriter.WriteValue(ResourceTypeCode typeCode, Object value, BinaryWriter writer, IFormatter objFormatter) 
    at System.Resources.ResourceWriter.Generate() 
    at System.Resources.ResourceWriter.Dispose(Boolean disposing) 
    at System.Resources.ResourceWriter.Close() 
    at Microsoft.Build.Tasks.ProcessResourceFiles.WriteResources(IResourceWriter writer) 
    at Microsoft.Build.Tasks.ProcessResourceFiles.WriteResources(String filename) 
    at Microsoft.Build.Tasks.ProcessResourceFiles.ProcessFile(String inFile, String outFile) 
    at Microsoft.Build.Tasks.ProcessResourceFiles.Run(TaskLoggingHelper log, ITaskItem[] assemblyFilesList, List`1 inputs, List`1 outputs, Boolean sourcePath, String language, String namespacename, String resourcesNamespace, String filename, String classname, Boolean publicClass) 
    at Microsoft.Build.Tasks.ProcessResourceFiles.Run(TaskLoggingHelper log, ITaskItem[] assemblyFilesList, List`1 inputs, List`1 outputs, Boolean sourcePath, String language, String namespacename, String resourcesNamespace, String filename, String classname, Boolean publicClass) 
    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 taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult) 

我不能爲我的生命運行此一跌。我訪問過msdn論壇,發現這對很多人來說都是一個問題,但是MS或其他人沒有提供一致的解決方案。

有沒有人看過這個,並修復它?請指教是必要的!

感謝

+0

多一點的上下文可能會有所幫助。這個應用程序做什麼?它是通過p/invoke等進行特殊的互操作嗎? – Mateo

+0

它是醫療軟件。我相信這可能與處理圖像有關。我們使用Image保存患者照片或標誌。保存但我已將所有Image.Save代碼註釋掉,並仍然出現錯誤。 – Encryption

+0

似乎在保存資源時出現錯誤。我沒有權限將文件保存到某個位置時看到此錯誤。如果您以管理員身份運行VS,會發生什麼? –

回答

2

經過幾個小時的故障排除,我打開並使用VS 2010命令行提示符使用MSBUILD「我的解決方案文件路徑在這裏」構建項目。這提供了一個更可見的構建事件序列,並且我發現我的項目在編譯表單16後失敗。表單編譯似乎按照解決方案資源管理器中的對象順序排列。於是我查看了下一張表格,發現它包含一個圖片框。我也檢查過之後的表單,發現我無法打開設計器而沒有錯誤(對象引用未設置爲對象的實例)。顯然,這個問題現在是雙重的。

要解決我不得不刪除圖片框對象從我認定爲有問題(它沒有被使用任何方式),因爲它似乎是損壞的第一個窗體。我發現與空引用異常的第二種形式是使用用戶控件。在調用InitializeComponent()之前,用戶控件構造函數的代碼試圖將對象傳遞給容器。由於容器在調用有問題的代碼時沒有在InitializeComponent中創建事件,因此創建了空引用。

解決上述段落中的問題後,我的解決方案在Windows 7

0

沒有爲Windows 7的一個GDI更新,我想,如果我沒有記錯。也許這將解決問題。您的解決方案是否使用commsnd行上的Msbuild構建?

+0

Erik,我不確定你問的是什麼,但我直接在VS2008中使用F6構建我的解決方案。不要使用命令行。 – Encryption

+0

如果您打開Vs2010命令提示符並編寫「msbuild mysolitionfilename.sln」,它是否構建? –

+0

我正在使用VS2008 .... – Encryption

0

你在你的應用中使用TIFF圖像嗎?

前段時間,我也有一個TIFF圖像的問題,作爲報告的一部分,不會在Win7 x64下編譯,儘管它在Vista x86下編譯得像魅力一樣。錯誤消息還涉及GDI +。我以不同的格式(PNG)保存圖像,問題消失了。

當時(2011年3月左右),我首先確保我的Windows是最新版本,但沒有解決問題。所以也許有Erik提到的這樣的更新,但它當時並沒有通過Windows Update(也許它是更新的)。

+0

項目中沒有TIFF圖像。我有PNG和ico圖像。我已經去除了所有圖像文件,並嘗試編譯,仍然沒有運氣。 – Encryption

3

我使用命令行msbuild編譯並確定問題位置。

這是一個類中的resx文件,其中有一個未使用的圖像。我刪除了這一切,一切都很好。現在可以建立良好。

0

刪除從資源管理器的資源編譯(右鍵單擊每個和刪除),然後回加。對我來說它解決了這個問題。

相關問題