代码之家  ›  专栏  ›  技术社区  ›  Jon Dewees

Visual Studio错误:“GenerateSource”任务意外失败

  •  7
  • Jon Dewees  · 技术社区  · 17 年前

    在用19个项目构建VS 2008解决方案时,我有时会得到:

    The "GenerateResource" task failed unexpectedly.
    System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
       at System.IO.MemoryStream.set_Capacity(Int32 value)
       at System.IO.MemoryStream.EnsureCapacity(Int32 value)
       at System.IO.MemoryStream.WriteByte(Byte value)
       at System.IO.BinaryWriter.Write(Byte value)
       at System.Resources.ResourceWriter.Write7BitEncodedInt(BinaryWriter store, Int32 value)
       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, ArrayList inputs, ArrayList outputs, Boolean sourcePath, String language, String namespacename, String resourcesNamespace, String filename, String classname, Boolean publicClass)
       at Microsoft.Build.Tasks.GenerateResource.Execute()
       at Microsoft.Build.BuildEngine.TaskEngine.ExecuteInstantiatedTask(EngineProxy engineProxy, ItemBucket bucket, TaskExecutionMode howToExecuteTask, ITask task, Boolean& taskResult)   C:\Windows\Microsoft.NET\Framework\v3.5
    

    通常发生在VS运行约4小时后;让VS正确编译的唯一方法是关闭VS,然后重新启动。

    我在一台3GB内存的机器上。TaskManager显示devenv.exe工作集为578060K,机器的整个内存分配为1.78GB。它应该有足够多的内存来生成资源。

    8 回复  |  直到 10 年前
        2
  •  1
  •   user2189331 user2189331    17 年前

    听起来像个虫子。

    http://www.codeprof.com/dev-archive/66/6-27-664019.shtm

    在底部,有人建议添加:

    <GenerateSourceNeverLock类型程序集>true</GenerateSourceNeverLock类型程序集>

    到您的项目文件。看起来有点可疑,但值得一试。

        3
  •  1
  •   Chris Woodruff    15 年前

    以防其他人在展望未来。..

    就我而言,原来我有一个损坏的resx文件。
    我增加了GDI句柄,编译错误消失了。

    但是当我尝试运行应用程序(使用调试器)时, 我们有一个登录屏幕,可以加载主屏幕。登录屏幕称为主屏幕的“显示”事件。..主对象从未被实例化,也没有引发任何错误。

    我将resx文件还原为以前的文件,现在一切正常。

    Visual Studio 2008、VB.Net、Windows 7

        4
  •  1
  •   Bo Persson Touseef    14 年前

    您能尝试在项目文件的第一个PropertyGroup下添加此属性吗?

    <GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
    

    如果有效,请告诉我。

        5
  •  0
  •   erlando    17 年前

    我过去常常用更大的解决方案来解决这个问题。我的策略是将较大的解决方案分解为较小的解决方案。

    您也可以尝试:

    http://stevenharman.net/blog/archive/2008/04/29/hacking-visual-studio-to-use-more-than-2gigabytes-of-memory.aspx

        6
  •  0
  •   Tomasz Jakub Rup    10 年前

    我有时已经通过了这个错误。您所要做的就是删除obj路径中的所有文件。之后,清洁并重建您的解决方案,并完成。

        7
  •  0
  •   Sten Björsell    10 年前

    “清洁溶液”效果很好。顶部菜单构建->清理,然后构建、调试和 再次发布所有作品。此外,最好禁用AVAST等防病毒软件,以便无故障发布和安装。之后重新启用。

        8
  •  0
  •   gowtham kondari    7 年前

    TFS喜欢将文件标记为只读。 删除obj/x86的内容