VBでResourcesフォルダに画像を追加した際に起こるエラーの対処法
引き継いだコードなのですがResourcesフォルダ内に新たに画像を追加したり、削除したりすると下記のようなエラーが発生しました。
System.OutOfMemoryException: 種類 'System.OutOfMemoryException' の例外がスローされました
このエラーの対処法を記述していきます。
※Resourcesフォルダを削除するのでどこかに画像を一時避難させておいてください
エラー全文
エラー 1 The "GenerateResource" task failed unexpectedly. System.OutOfMemoryException: 種類 'System.OutOfMemoryException' の例外がスローされました。 場所 System.IO.MemoryStream.set_Capacity(Int32 value) 場所 System.IO.MemoryStream.EnsureCapacity(Int32 value) 場所 System.IO.MemoryStream.Write(Byte buffer, Int32 offset, Int32 count) 場所 System.IO.BinaryWriter.Write(Byte buffer) 場所 System.Runtime.Serialization.Formatters.Binary.BinaryWriter.WriteSingleArray(NameInfo memberNameInfo, NameInfo arrayNameInfo, WriteObjectInfo objectInfo, NameInfo arrayElemTypeNameInfo, Int32 length, Int32 lowerBound, Array array) 場所 System.Runtime.Serialization.Formatters.Binary.BinaryWriter.WriteObjectByteArray(NameInfo memberNameInfo, NameInfo arrayNameInfo, WriteObjectInfo objectInfo, NameInfo arrayElemTypeNameInfo, Int32 length, Int32 lowerBound, Byte byteA) 場所 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray(WriteObjectInfo objectInfo, NameInfo memberNameInfo, WriteObjectInfo memberObjectInfo) 場所 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) 場所 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header inHeaders, __BinaryWriter serWriter, Boolean fCheck) 場所 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header headers, Boolean fCheck) 場所 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) 場所 System.Resources.ResourceWriter.WriteValue(ResourceTypeCode typeCode, Object value, BinaryWriter writer, IFormatter objFormatter) 場所 System.Resources.ResourceWriter.Generate() 場所 System.Resources.ResourceWriter.Dispose(Boolean disposing) 場所 System.Resources.ResourceWriter.Close() 場所 Microsoft.Build.Tasks.ProcessResourceFiles.WriteResources(IResourceWriter writer) 場所 Microsoft.Build.Tasks.ProcessResourceFiles.WriteResources(String filename) 場所 Microsoft.Build.Tasks.ProcessResourceFiles.ProcessFile(String inFile, String outFile) 場所 Microsoft.Build.Tasks.ProcessResourceFiles.Run(TaskLoggingHelper log, ITaskItem assemblyFilesList, ArrayList inputs, ArrayList outputs, Boolean sourcePath, String la nguage, String namespacename, String resourcesNamespace, String filename, String classname, Boolean publicClass) 場所 Microsoft.Build.Tasks.GenerateResource.Execute() 場所 Microsoft.Build.BuildEngine.TaskEngine.ExecuteInstantiatedTask(EngineProxy engineProxy, ItemBucket bucket, TaskExecutionMode howToExecuteTask, ITask task, Boolean& taskResult) CompMng
ググってもterateilで質問してもエラーを解決することができなかったのですがいろいろと模索していたら偶然解決できたので、共有します。誰かの助けになれば幸いです。 1ヵ月無駄な時間を過ごしてしましました…
この方法が正しいかはわかりません。おそらく正攻法ではありません、Resourcesに追加する画像はできるだけ少なくしたほうがいいと思います。私は追加する時点で600枚ほど入っていました。
今から説明する方法でリソースは追加することができるのですが、何度も言いますが一番いい方法はResources画像を減らすことです。私もこの方法でResources画像をガンガン追加していましたが、最終的には画像の枚数を400枚ほど減らしたところ正常に追加をすることができるようになりました。
※UIに設定した画像が剥がれてしまうことがあるのでそこは自己責任でお願いします
解決方法
1.ソリューションエクスプローラ上にあるResourcesフォルダを削除する
2.削除の確認ボタンが出るのでOK
3.エラーがたくさん出るのを確認
4.プロジェクトを保存する。画像は保存せずに閉じようとした場合。はいを選択
5.プロジェクトフォルダに移動しMyProjectを開
6.2つのResourcesファイルを削除※多分これが問題だと思う
7.プロジェクトを開きプロジェクト→CompMsgのプロパティ
8.クリックしてResourcesを作成
9.ドラック&ドロップで画像をぶち込む
以上の手順でエラーは解決できると思います。簡単な手順なのですがVisual Basicもvisual Studioも初めてだったのでかなり苦戦してしまいました…