none
リソースにある一定以上ファイルを追加するとビルド時エラーになる RRS feed

  • 質問

  • 初めましての投稿です、皆様よろしくお願いします。

    今回リソースのファイル埋め込みで詰まってしまったので質問をさせてもらいました。

     

     

    私はVisualstudio2008のvisualBasicにて開発を行っているのですが

    マイプロジェクトの中のリソースにファイルを追加しているとある一定量を超えるとビルド時にエラーが出てしまいました

     

    正常にビルドされ、動作する時のリソースファイル数は66ファイル

    そのうち50ファイルは1ファイルにつき約1.7MBほどの容量があります

    この状態ですと正常にビルドされたEXE内にデータが格納されるようで

    生成されたEXEは80MBほどになり、正常に動作します

     

    ここにさらに1ファイル約1.7MBのファイルを30ファイル追加すると以下のようなエラーが出てしまいました

     

    エラー 1 "GenerateResource" タスクが予期せずに失敗しました。
    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, Int32 index, Int32 count)
       場所 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 language, 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) プロジェクト名

     

    リソースに含める事の出来るファイル数、あるいは総合容量には制限があるのでしょうか

    試しに別のリソースファイルをプロジェクトに追加し、そこにファイルを挿入してビルドしてみましたが

    やはりエラーになってしまいました。

     

    補足としてこの操作の目的は

    ゲーム制作のデータファイルの格納を目的としています

    格納されているデータはdirect3Dで使用するxファイルです。

     

    もしよろしけばどなたか解決方法をお教えいただければ幸いです。

     

    使用OS Windows Vista Home Premium SP1

    開発環境 VisualStudio2008 Standard

    2008年10月4日 10:53

回答

  •  パぅ さんからの引用

    正常にビルドされ、動作する時のリソースファイル数は66ファイル

    そのうち50ファイルは1ファイルにつき約1.7MBほどの容量があります

    この状態ですと正常にビルドされたEXE内にデータが格納されるようで

    生成されたEXEは80MBほどになり、正常に動作します

     

    ここにさらに1ファイル約1.7MBのファイルを30ファイル追加すると以下のようなエラーが出てしまいました

    構成が異様に感じます。

    1.7MBものファイルですから、リソースとせずに別ファイルとして持つべきでしょう。

     

     パぅ さんからの引用

    リソースに含める事の出来るファイル数、あるいは総合容量には制限があるのでしょうか

    試しに別のリソースファイルをプロジェクトに追加し、そこにファイルを挿入してビルドしてみましたが

    やはりエラーになってしまいました。

    KBにありますね。

     

    System.OutOfMemoryException thrown while building a large C# solution using Visual Studio 2005 SP1 IDE.

    http://support.microsoft.com/kb/949755

     

    「ソリューションのサイズを減らせ」ということですので、大きなファイルを埋め込むという現状の方針では解決が難しいかと考えました。

    外部にバラで持つ、外部に何らかの方法で1ファイルにパックしたファイルを持つ等で対応することになるのでしょうか。

    2008年10月5日 8:22
    モデレータ

すべての返信

  •  パぅ さんからの引用

    正常にビルドされ、動作する時のリソースファイル数は66ファイル

    そのうち50ファイルは1ファイルにつき約1.7MBほどの容量があります

    この状態ですと正常にビルドされたEXE内にデータが格納されるようで

    生成されたEXEは80MBほどになり、正常に動作します

     

    ここにさらに1ファイル約1.7MBのファイルを30ファイル追加すると以下のようなエラーが出てしまいました

    構成が異様に感じます。

    1.7MBものファイルですから、リソースとせずに別ファイルとして持つべきでしょう。

     

     パぅ さんからの引用

    リソースに含める事の出来るファイル数、あるいは総合容量には制限があるのでしょうか

    試しに別のリソースファイルをプロジェクトに追加し、そこにファイルを挿入してビルドしてみましたが

    やはりエラーになってしまいました。

    KBにありますね。

     

    System.OutOfMemoryException thrown while building a large C# solution using Visual Studio 2005 SP1 IDE.

    http://support.microsoft.com/kb/949755

     

    「ソリューションのサイズを減らせ」ということですので、大きなファイルを埋め込むという現状の方針では解決が難しいかと考えました。

    外部にバラで持つ、外部に何らかの方法で1ファイルにパックしたファイルを持つ等で対応することになるのでしょうか。

    2008年10月5日 8:22
    モデレータ
  • Azulenさん、回答ありがとうございます。

     

    >構成が異様に感じます。

    >1.7MBものファイルですから、リソースとせずに別ファイルとして持つべきでしょう。

    はい、外部でファイルとして出せば楽なのですが

    そのままですとxファイルが丸見えになってしまい、手軽に取り出せてしまいます

    隠蔽も目的としていたのでEXEにファイルを簡単にまとめられるリソースを利用しようと思った次第です

     

    >「ソリューションのサイズを減らせ」ということですので、大きなファイルを埋め込むという現状の方針では解決が難しいかと考えました。

    >外部にバラで持つ、外部に何らかの方法で1ファイルにパックしたファイルを持つ等で対応することになるのでしょうか。

    なるほどです、やはりファイルサイズオーバーが原因のようですね原因が解り感謝致します。

     

    何とかファイルをまとめる方法を模索しようと思います。

    今回は回答、ありがとうございましたー。

    2008年10月6日 9:40
  •  パぅ さんからの引用

    そのままですとxファイルが丸見えになってしまい、手軽に取り出せてしまいます

    隠蔽も目的としていたのでEXEにファイルを簡単にまとめられるリソースを利用しようと思った次第です

    程度の差ですが、リソースにまとめても取り出せます。

    少なくとも開発ツールを使える人にはできるレベルです。

     

    (単純にXファイルとして見えなければ良いという程度であれば要求は満たしているのかもしれません。)

    2008年10月6日 13:57
    モデレータ