【问题标题】:Exception "System.InvalidProgramException: JIT Compiler encountered an internal limitation " has occured发生异常“System.InvalidProgramException:JIT 编译器遇到内部限制”
【发布时间】:2011-07-28 07:03:13
【问题描述】:

示例代码:

以下代码不完整,但足以说明我面临的重量问题。

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&lt;TestClass&gt;

请为此提供解决方案。

问候,

尼丁萨胡

【问题讨论】:

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


    【解决方案1】:

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

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

    顺便说一句,您在传递参考值时不需要ref

    【讨论】:

    • 有时,即使有参考值也需要ref。例如,当类型不可变时。但我不确定这里是否需要它。
    • 不确定不可变类型是什么意思。当您想在方法调用后更改引用指向的内容时,您可以通过 ref 传递引用类型。
    • 对于可变类型,您可以在不更改引用的情况下以某种方式更改值(例如更改PersonName),因此您可能不需要ref。对于不可变类型(例如string),如果您希望更改在调用方法中显而易见,则始终需要ref
    • 正如我在查询顶部提到的代码未完成顺便说一句,让我更清楚地告诉你。 Class1 是内部的。Class1 有内部方法“Sum”。要为此方法创建单元测试,我需要 class1 b/c 的访问器,它是内部的。方法 sum 将第一个参数作为 TestClass 的列表。所以当我在单元测试用例中调用方法 sum 时。我还需要创建 TestClass_Accessor 类型的列表(B/c 测试类也是内部的)
    • 问题是我创建了 TestClass_Accessor 类型的 List 对象,并且在实际方法中具有 TestClass 类型的 List 对象。您最终会产生相同的场景。创建应该是内部的用户定义类类型的列表对象。如果您有任何其他疑问,请告诉我并提供任何解决方案。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-19
      • 2020-03-06
      • 2015-12-20
      • 2021-11-14
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多