【问题标题】:Compiler Issue in Windows 7: A generic error occurred in GDI+Windows 7 中的编译器问题:GDI+ 中出现一般错误
【发布时间】:2011-08-10 20:58:57
【问题描述】:

我们有一个应用程序,我们需要在 Windows 7 环境中开始测试和开发。在 VS2008 下在 WinXP 下编译可以正常工作,没有问题。但是,当我今天在使用 VS2008 的 Windows 7 机器上编译它时,出现以下错误:

    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或其他任何人都没有提供一致的解决方案。

有没有人见过这个并修复它?需要请指教!

谢谢

【问题讨论】:

  • 多一点上下文可能会有所帮助。这个应用程序有什么作用?它是否通过 p/invoke 等执行特殊的互操作?
  • 是医疗软件。我相信这可能与图像的处理有关。我们使用 Image.Save 保存患者照片或徽标,但我已注释掉所有 Image.Save 代码,但仍然出现错误。
  • 保存资源时好像出错了。当我无权将文件保存到某个位置时,我看到了这个错误。如果你以管理员身份运行 VS 会发生什么?
  • 我是 PC 的管理员。这应该不是问题......
  • 您是否以管理员身份运行 Visual Studio?您必须右键单击并以管理员身份运行。即使在无法访问目录时作为管理员,我也看到过这个问题......

标签: c# visual-studio-2008 windows-7


【解决方案1】:

我使用命令行 msbuild 编译并确定了问题的位置。

这是一个类中的 resx 文件,其中包含一个未使用的图像。我删除了它,一切又好了。现在可以正常构建了。

【讨论】:

    【解决方案2】:

    经过数小时的故障排除后,我使用 VS 2010 命令行提示符使用 MSBUILD“我的解决方案文件路径”打开并构建了项目。这提供了更明显的构建事件序列,我发现我的项目在编译表单 16 后就失败了。表单编译似乎按照解决方案资源管理器中的对象顺序进行。所以我检查了下一个表格,发现它包含一个图片框。在那之后我还检查了表单,发现我无法打开设计器而没有错误(对象引用未设置为对象实例)。显然,问题现在有两个方面。

    为了解决这个问题,我必须从我认为有问题的第一个表单中删除图片框对象(它没有被以任何方式使用),因为它似乎已损坏。我发现带有空引用异常的第二种形式是使用用户控件。用户控件的构造函数的代码试图在调用 InitializeComponent() 之前将对象传递给容器。这创建了空引用,因为在调用有问题的代码时容器尚未在 InitializeComponent 中创建事件。

    在解决了上一段中的问题后,我的解决方案在 Windows 7 下编译。

    【讨论】:

      【解决方案3】:

      如果我没记错的话,我想有一个适用于 Windows 7 的 GDI 更新。也许这会解决问题。您的解决方案是否在命令行上使用 Msbuild 构建?

      【讨论】:

      • 埃里克,我不完全确定你在问什么,但我直接在 VS2008 中构建我的解决方案(使用 F6)。不要使用命令行。
      • 如果你打开一个 Vs2010 命令提示符,写 «msbuild mysolitionfilename.sln»,它会构建吗?
      • 然后打开一个vs2008命令promot。它是否在 cmd 行上编译?
      【解决方案4】:

      您在应用中使用 TIFF 图像吗?

      前段时间,我也遇到了一个问题,即 TIFF 图像作为报告的一部分,在 Win7 x64 下无法编译,尽管它在 Vista x86 下编译得非常好。该错误消息还涉及 GDI+。我将图像保存为不同的格式 (PNG),问题消失了。

      当时(大约 2011 年 3 月),我首先确保我的 Windows 是最新的,但它并没有解决问题。因此,也许 Erik 提到了这样的更新,但当时并没有通过 Windows 更新(也许它更新)。

      【讨论】:

      • 项目中没有 TIFF 图像。我有 png 和 ico 图像。我已经采取了删除所有图像文件并尝试编译的方式,但仍然没有运气。
      【解决方案5】:

      从资源管理器中删除资源(右键单击每个并删除),然后将它们添加回来。对我来说它解决了问题。

      【讨论】:

        【解决方案6】:

        我有同样的问题。 我刚刚使用了 msbuild myProject.sln 命令,它修复并成功构建,没有错误!现在我可以手动构建我的解决方案。 无需重新添加我的资源

        【讨论】:

          猜你喜欢
          • 2011-03-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-20
          相关资源
          最近更新 更多