异常“System.InvalidProgramException:JIT Compiler遇到内部限制”已经发生

时间:2011-07-28 07:03:14

标签: c# visual-studio unit-testing testing jit

示例代码:

下面的代码不完整但足以显示我面临的wt问题。

namespace ClassLibrary1
{
    class Class1
    {
         internal static void sum(ref List<TestClass> a, int b) 
         {

             //some code

         }
     }

}

同一个程序集中还有另一个类

namespace ClassLibrary1 
{
    class TestClass
    { 
         //code

    }

 }

当我为方法sum创建单元测试用例时,代码就像

[TestMethod()] 
public void sumTest()
{
    List<TestClass_Accessor> lstTestClass = new List<TestClass_Accessor>(); 
    Class1_Accessor.sum(ref lstTestClass, b); 
}

问题:在上面的代码中,我创建了TestClass类型的列表,但它是私有类,因此VSTS创建TestClass_Accessor来访问类功能。 在方法Sum中,它将参数作为“TestClass”类型列表的引用。

我还调试了我的代码,但是

Class1_Accessor.sum(ref lstTestClass, b);被调试它抛出异常“System.InvalidProgramException:JIT Compiler遇到内部限制”。

当我创建字符串类型列表然后它工作,即列表没有问题。

根据我的理解问题是列表类型。在单元测试中,我们创建类型TestClass_Accessor的列表。

在班级列表中有List<TestClass>类型。

请为此提供解决方案。

此致

Nitin Sahu

2 个答案:

答案 0 :(得分:0)

我在理解你在说什么时遇到了问题。但... TestClass在您提供的代码中不是私有的。默认情况下,如果未指定访问修饰符,则它是内部的。您可以轻松访问测试中的内部成员。当你消除额外的东西时,你可能不会遇到任何问题(TestClass_Accessor)。

请看这里:How to test Framework if Unit tests are in separate assembly?

和BTW传递参考值时不需要ref

答案 1 :(得分:0)

使用“ref”是这里问题的一部分。我遇到了同样的问题,当不使用“ref”关键字时,它就消失了。

Peri已经说过,这里不需要使用ref。