Visual Studio エラー:「GenerateResource」タスクが予期せず失敗しました
-
08-06-2019 - |
質問
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 Ram を搭載したマシンを使用しています。TaskManager は、devenv.exe ワーキング セットが 578060K であり、マシンの全体のメモリ割り当てが 1.78GB であることを示しています。リソースを生成するのに十分な RAM が必要です。
解決
以前は、より大きなソリューションでこれに何度も遭遇しました。私の戦術は、より大きなソリューションをより小さなソリューションに分割することでした。
次のことも試してみてください:
他のヒント
.suo ファイルを削除して、ソリューションを再度開いてみます。
バグのようですね。
http://www.codeprof.com/dev-archive/66/6-27-664019.shtm
最後の方に、誰かが次のことを追加することを提案しています。
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
プロジェクトファイルに。ちょっと疑わしいように思えますが、試してみる価値はあります。
将来誰かが探している場合に備えて...
私の場合、resx ファイルが破損していることが判明しました。
GDI ハンドルを増やしたところ、コンパイル エラーはなくなりました。
しかし、その後、アプリを実行しようとしたとき(デバッガー付き)、メイン画面をロードするログイン画面があります。ログイン画面はメイン画面の「show」イベントを呼び出します...そしてメインオブジェクトはインスタンス化されず、エラーも発生しませんでした。
resx ファイルを以前のファイルに戻しましたが、現在はすべて問題ありません。
Visual Studio 2008、VB.Net、Windows 7
プロジェクト ファイルの最初の PropertyGroup の下にこのプロパティを追加してみていただけますか?
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
それがうまくいくかどうか教えてください。
私はすでにこのエラーを時々通り過ぎています。必要なのは、obj パス内のすべてのファイルを削除することだけです。その後、ソリューションをクリーンにして再構築すれば完了です。
「クリーンソリューション」は正常に機能します。トップメニュービルド - >クリーン、ビルド、デバッグ、公開はすべて再度正常に動作します。また、AVAST などのウイルス対策ソフトウェアを無効にすると、問題なく公開およびインストールできるようになります。その後、再度有効にします。
TFS はファイルを読み取り専用としてマークすることを好みます。obj/x86 の内容を削除します