【发布时间】:2014-05-09 11:19:44
【问题描述】:
这是我很长时间以来看到的最奇怪的编程问题。
我正在使用Microsoft Visual C# 2010 Express、C# 和.NET 2.0 来开发应用程序。这个应用程序引用了几个dll/assemblies(这些dll都是在我的机器上生成的)。
下面是部分代码(都是基本的东西):
public class PowerManagement
{
[TestCase]
public void PrepareTest(){
// Configure according to pre-conditions
Preconditions precondition = new Preconditions();
precondition.SetupPreconditions();
...
}
[TestCase]
public void PerformTest(){
TestcaseData testcaseData = new TestcaseData();
// Set Trigger and perform check
switch (testcaseData.triggerNumber){
case (1):
if ((new Trigger1(testcaseData)).Validate() != 1)
Report.TestStepFail("failed");
break;
...
case (4):
if ((new Trigger4(testcaseData)).Validate() != 1)
Report.TestStepFail("failed");
break;
default:
Report.TestStepFail("Not yet implemented");
break;
}
}
}
这个应用程序然后从Visual C# 2010 Express 生成一个dll 并在其他地方使用,一切都很好。当我在上面的 switch 语句中添加另一个案例时,问题就出现了(见下文)
...
case (4):
if ((new Trigger4(testcaseData)).Validate() != 1)
Report.TestStepFail("failed");
break;
case (5):
if ((new Trigger5(testcaseData)).Validate() != 1)
Report.TestStepFail("failed");
break;
default:
Report.TestStepFail("Not yet implemented");
break;
我仍然可以毫无问题地构建并生成 dll,但是当我使用生成的 dll 时,我收到以下错误:
A .NET exception (InvalidProgramException) occured in the module PowerManagement
Error message: Common Language Runtime detected an invalid program.
Throwing method: PowerManagement.PerformTest
(即使我复制case(4)并将其粘贴为新案例也会出现问题,因此它与Trigger5-class无关)
这里发生了什么?我查看了 Stackoverflow 中的其他 InvalidProgramException 和 Common Language Runtime,但似乎没有一个相关。
我知道这个问题很奇怪所以请告诉我,我会提供更多信息。我使用的是 64 位 Windows 8 机器,如果这很重要的话。我已经检查了 VS 和 .NET 更新的任何更新。我还没有重新生成所有的 dll 几次,还从头开始创建了几次解决方案。
【问题讨论】:
-
首先清理所有的 pdb。您可以尝试通过解决方案节点上 VS 解决方案资源管理器的上下文菜单中的“清洁解决方案”选项来执行此操作。不过,我会手动查找并删除所有 pdb。其次清理所有 pdb 下载缓存。第三次检查程序集本地副本,即全部删除它们并让它们在重建时刷新。重建所有程序集并尝试一下。