ILMergeで"インデックスが配列の境界外です。"

2007/12/06 追記 2.0.7.1129 では直っているようです。


自作アプリと自作クラスライブラリ、海外製のライブラリをILMerge(v2.0.7.0228)でマージ使用としたところ


C:\hoge>"C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /target:winexe /wildcards /out:.\Hoge_m.exe .\Hoge.exe .\*.dll
An exception occurred during merging:
インデックスが配列の境界外です。
場所 System.Compiler.BinaryWriter.Write(String str, Boolean emitNullTerminator)
場所 System.Compiler.Ir2md.WriteCustomAttributeLiteral(BinaryWriter writer, Literal literal, Boolean needsTag)
場所 System.Compiler.Ir2md.WriteCustomAttributeSignature(ExpressionList expressions, ParameterList parameters, Boolean onlyWriteNamedArguments, BinaryWriter signature)
場所 System.Compiler.Ir2md.GetBlobIndex(ExpressionList expressions, ParameterList parameters)
場所 System.Compiler.Ir2md.PopulateCustomAttributeTable()
場所 System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation)
場所 System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer)
場所 System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName)
場所 System.Compiler.Module.WriteModule(String location, Boolean writeDebugSymbols)
場所 ILMerging.ILMerge.Merge()
場所 ILMerging.ILMerge.Main(String[] args)

と表示されて0バイトのexeが完成しました。


色々試したところ、自作クラスライブラリにあるクラスのプロパティに付加したDescription属性がまずいことがわかりました。
半角だけだと問題なく、全角が混じると起こるようです。
コメントは 文字数,SJISでのバイト数 です。


成功
[Description("01234567890123456789")] //10文字,20バイト
[Description("012345678901234567890")] //11文字,21バイト
[Description("0123456789012345678901234567890123456789")] //40文字,40バイト

失敗
[Description("012345678901234567890")] //11文字,22バイト
[Description("0123456789012345678900")] //12文字,22バイト


まとめてみたもののいまいちよくわかりません…文字バイト数の計算にバグでもあるんでしょうか。
とりあえず中身を短くして対処しましたが、文が微妙な感じに…


スタックトレースを見た感じではDescriptionに限らなそうなのでやってみたところDisplayNameでも再現しました。
文字リテラルを指定する属性は全滅な気がします。