1

次のコードがあります

 this.SafeUpdate(rate, Guid.Parse(import.myGuid), c => c.myGuid);

SafeUpdate は基本的に、解析された guid 値を受け取り、レート オブジェクトの myGuid プロパティに適用します。これは私のフロント エンドからは正常に動作しますが、単体テストで実行すると「CLR が検出されました...」というエラーがスローされます。奇妙なのは、DateTime.Parse と int.Parse の同じステートメントが正常に機能することです。Guid と小数では失敗します。エラーが解析にあるとは思いません(別の変数に抽出すると、正しい解析値が得られます)。ステートメントはguidとdecimal以外のすべてのタイプで正常に機能するため、それがモックであるとは思いません。何か案は?

4

1 に答える 1

2

昨日、ビルド サーバーで同様のエラーが発生しました。例外は、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 は、これに対する単体テストをまだ行っていないと思います。:-)

于 2013-01-18T18:27:59.873 に答える