昨日、ビルド サーバーで同様のエラーが発生しました。例外は、DataContractSerializer の ReadObject() メソッドによってスローされました。
System.InvalidProgramException: Common Language Runtime detected an invalid program.
at System.Xml.EncodingStreamWrapper..ctor(Stream stream, Encoding encoding)
at System.Xml.XmlUTF8TextReader.SetInput(Stream stream, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose)
at System.Xml.XmlDictionaryReader.CreateTextReader(Stream stream, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose)
at System.Xml.XmlDictionaryReader.CreateTextReader(Stream stream, XmlDictionaryReaderQuotas quotas)
at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(Stream stream)
この 1 つのことだけを行うコンソール アプリを作成しました。エラーなしで実行されますが、単純な単体テストで失敗します。.net 4.0 をターゲットとするテスト フレームワークには、Gallio/MbUnit 3.4.11.0 を使用しています。
using System;
using System.IO;
using System.Runtime.Serialization;
using MbUnit.Framework;
namespace TestApp
{
[TestFixture]
class Program
{
static void Main()
{
FooBar();
Console.ReadKey();
}
public static void FooBar()
{
var type = typeof(string);
var foo = "foo";
using (var stream = new MemoryStream())
{
var serializer = new DataContractSerializer(type);
serializer.WriteObject(stream, foo);
stream.Seek(0, SeekOrigin.Begin);
var deserializer = new DataContractSerializer(type);
var bar = deserializer.ReadObject(stream);
Console.WriteLine(bar);
}
}
[Test]
public void Test()
{
FooBar();
}
}
}
アプリケーションは正常に動作しますが、テストはスローされます。奇妙なことに、このテストは私の開発ボックスではパスしますが、私たちのビルド サーバーと同僚の開発ボックスでは失敗します。明らかに、私の開発ボックスには、テストに合格するための何か違いがありますが、まだその違いを特定できていません。
更新 1
私の開発ボックスの System.dll のバージョンは 4.0.30319.296 ですが、ビルド サーバーと同僚の開発ボックスでは 4.0.30319.1001 です。ただし、System.Xml.dll と System.Runtime.Serialization.dll は 4.0.30319.1 では同一です。
更新 2
"4.0.30319.1001" を Google ですばやく検索すると、このセキュリティ更新プログラムhttp://support.microsoft.com/kb/2742595が返されます。開発ボックス。ビルド サーバーで更新プログラムをアンインストールし、再起動したところ、問題は解決しました。Microsoft は、これに対する単体テストをまだ行っていないと思います。:-)