none
Windows 7でのVS2008の開発について RRS feed

  • 質問

  • すいません、かなり急ぎの為、マルチポストしています。

    以下、マルチポスト先です。

    http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/a4b69aec-0cf7-4be0-91ba-77bbb06b6f33/windows-7vs2008?forum=csharpgeneralja
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=70762
    http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=17565
    http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=32270&rev=&no=0

    先日、XPのサポート終了の為、開発環境をWindows XPからWindows 7へ移行しました。

    その際に、新たにClassを追加するとエラーが発生するようになりました。

    エラーは以下です。


    エラー 1 The "GenerateResource" task failed unexpectedly.
    System.Runtime.InteropServices.ExternalException: GDI+ で汎用エラーが発生しました。
       場所 System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
       場所 System.Drawing.Image.Save(MemoryStream stream)
       場所 System.Drawing.Image.System.Runtime.Serialization.ISerializable.GetObjectData(SerializationInfo si, StreamingContext context)
       場所 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
       場所 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
       場所 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 language, String namespacename, String resourcesNamespace, String filename, String classname, Boolean publicClass)
       場所 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) NS_client

    上記のエラーは、もう一度デバッグを実行すると無視出来るようですが、

    下記のコードを実行すると、

    string version = NS_client.Properties.Resources.version;

    Resources.versionへアクセスした時点で

    .resources ファイルが壊れています。ResourceReader を読み取ろうとしているときに予期しない EndOfStreamException が発生しました。

    のようなエラーが発生します。

    Resourcesの総入れ替えを行いましたが、解決しません。


    2014年4月17日 3:43

回答

  • 自己解決したので、ご報告です。

    新しいプロジェクトを作成し、リソースにアクセスするコード、

    System.Reflection.Assembly asm;
    asm = System.Reflection.Assembly.GetExecutingAssembly();
    string version = NS_client.Properties.Resources.version;


    のみ記載し、リソースのファイルを一つずつ追加していき、

    追加するたびにコンパイルを実行して確認したら、原因の画像が見つかりました。
    「seal.png」という名称の画像で、

    大きさ 95 x 100
    幅 95ピクセル
    高さ 100ピクセル
    ビットの深さ 24

    のようなプロパティです。

    ご返答頂いた方々、ありがとうございました。

    • 回答としてマーク n_keiichiro 2014年4月17日 9:00
    2014年4月17日 9:00

すべての返信

  • 旧開発環境:WindowsXP、Visual Studio 2008 C# Framework 3.5

    新開発環境:Windows7、Visual Studio 2008 C# Framework 3.5

    旧開発環境で開発していた場合はエラーは発生しませんでした。
    新開発環境にプロジェクトごとコピーして移動して、新しいClassを追加しただけでエラーが発生します。
    新しいFormを追加しただけでも同様にエラーとなります。
    また、一からプロジェクト新規作成し、既存のファイルを全て取り込んでも同様にエラーになります。

    アプリは、旅行業で利用するシステムで、
    SOAP通信でPHPと連動してデータベースとの送受信を行う感じです。

    Windows7 64bit です。
    2014年4月17日 6:31
  • >これは実行時エラーですか?
    >それともビルドエラーですか?
    >それともClass等を追加したタイミングで出るのでしょうか?
    実行時エラーです。
    resourcesを参照する部分で全てエラーが発生します。


    >「総入れ替え」とはどのような手法・手順ですか?
    >またリソースファイルに含まれている内容はどのような内容がありますか?
    >(文字列・アイコン・イメージ・オーディオ・ファイル等)
    プロジェクト→プロパティ→リソースを選択後、追加されているリソースを全て削除し、
    別のフォルダに退避してあった同じファイルを全て追加です。
    リソースの中身は、.gif、.png、.jpg、version.txt(アプリのバージョンの数値が入ってます。)

      
    >OSは32ビットですか?64ビットですか?
    >プロジェクトのターゲットCPUはx86ですか?x64ですか?AnyCPUですか?
    Windows7 64bit です。 
    AnyCPUです。

    >新プロジェクトを作成して当該リソースファイルを取り込んでから
    >Class等を追加するとどうなりますか?
    同様にエラーが発生します。
    2014年4月17日 7:00
  • >関係ないかもだけど、GenerateResourceタスク
    >http://msdn.microsoft.com/ja-jp/library/ms164295.aspx
    >に「 MSBuild 4.0 を使用して .NET 3.5 プロジェクトをターゲットにしている場合、x86 リソースでビルド>が失敗することがあります。 この問題を回避するために、ターゲットを AnyCPU アセンブリとしてビ>ルドできます。 」
    >という記述がありますね。 
    調査、ありがとうございます。

    >Class等を追加しなければresourcesを参照する部分でも
    >エラーは発生しないという事でしょうか?
    はい、ClassやFormを追加しなければ、エラーが発生せず、実行出来ます。

    >リソースファイル自体をExplorer等から完全に削除した状態から始めた場合はどうでしょうか?
    >(邪魔している要素がもしあったらを極力排除したい。)
    リソースを完全に削除後、ClassやFormを追加すると同様のエラーが発生します。
      
    >元の環境(XP)は?
    >AnyCPUというのは元の環境も新環境も変わらずという事ですよね?
    元の環境(Windows XP)も同様に、、AnyCPUです。

    >元の環境(XP)が32bitならば、
    >元の環境(XP)でプロジェクトのターゲットCPUをAnyCPUからx86にしてから動作を確認した状態で
    >新環境に持ってきた場合は?
    同様にエラーが発生します。
    別プロジェクトで開発していたシステムの場合は、ClassやFormを追加しても
    なぜかエラーが発生しません。

    >では新プロジェクトを作成して当該リソースファイルではなく、
    >新プロジェクトに含まれているリソースファイルに対象の画像等を追加した場合は?
    >(その際のターゲットCPUをAnyCPU・x86・x64全て)
    同様にエラーが発生します。
    2014年4月17日 7:41
  • フォーラム オペレーターの星 睦美です。

    複数の掲示板、フォーラムに同じ質問を投稿されている点を記載していただいていますが、MSDN フォーラムではマルチ スレッドは歓迎されない投稿方法です。

    上記の回答は、http://bbs.wankuma.com/index.cgi?mode=al2&namber=70762
    のスレッドの内容のようです。
    投稿者がすべての投稿に回答を反映させるのは大変ですし、それぞれの回答のスレッドが混乱するかも知れませんので情報をお持ちの方は回答が寄せられている(bbs.wankuma) のスレッドに返信いただくほうがよいと思います。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 編集済み 星 睦美 2014年4月17日 8:31 編集
    2014年4月17日 8:24
  • 自己解決したので、ご報告です。

    新しいプロジェクトを作成し、リソースにアクセスするコード、

    System.Reflection.Assembly asm;
    asm = System.Reflection.Assembly.GetExecutingAssembly();
    string version = NS_client.Properties.Resources.version;


    のみ記載し、リソースのファイルを一つずつ追加していき、

    追加するたびにコンパイルを実行して確認したら、原因の画像が見つかりました。
    「seal.png」という名称の画像で、

    大きさ 95 x 100
    幅 95ピクセル
    高さ 100ピクセル
    ビットの深さ 24

    のようなプロパティです。

    ご返答頂いた方々、ありがとうございました。

    • 回答としてマーク n_keiichiro 2014年4月17日 9:00
    2014年4月17日 9:00
  • 追記です。

    > ⇒存在しない場合、一番近くてどのようなプロパティか?
    近い画像は、
    サイズ:20.1KB(20,645バイト)
    ディスク上のサイズ:24.0KB(24,576バイト)

    エラーの出た画像は、
    サイズ:20.2KB(20,764バイト)
    ディスク上のサイズ:24.0KB(24,576バイト)

    > ⇒他と明らかに違う条件はあるか?(サイズが大きすぎる等)
    画像サイズは上記の通り、かなり小さいサイズです。

    確かXPで開発していた時に、エラーの出るこの画像の生成の仕方が、
    PDF上の画像をPrintScreenでコピーし、XP上のペイントに貼り付けて、
    PNGとして保存した感じです。
    原因はこれでしょうか??そんなバカなww
    2014年4月17日 16:36