InvalidProgramException / Common Language Runtime检测到无效程序

这是我在很长一段时间内看到的最奇怪的编程问题。

我正在使用Microsoft Visual C# 2010 ExpressC#.NET 2.0来开发应用程序。 这个应用程序引用了几个dll /程序集(这些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级无关)

这里发生了什么? 我已经查看了Stackoverflow中的其他InvalidProgramExceptionCommon Language Runtime ,但似乎没有相关。

我知道这个问题很奇怪,所以请告诉我,我会提供更多信息。 我正在使用64位Windows 8机器,如果这很重要。 我已经检查过VS和.NET更新的任何更新。 我也曾几次重新生成所有dll,并且还从头开始创建了几次解决方案。

我终于设法解决了这个问题。 我在C#Express中取消选中code optimization ,解决了这些问题。 仍然是最奇怪的事情,但由于我们使用旧工具和框架,我们不能真正责怪任何人。

尝试在应用程序池高级设置中启用32位应用程序。

只是想为此添加我的经验…就我而言,我在Azure上托管我的C#Web API,并且在尝试登录我的API时遇到了此消息。 我必须进入我的Azure管理门户(portal.azure.com),转到App Services,选择我的Web API程序,然后从Overview屏幕中单击Restart。 在此之后,程序再次正常工作。 在我的日志中没有找到任何进一步的线索。

升级到Visual Studio 2017 v15.8.6后,我遇到了这个问题。 当我删除web.config中编译标记中的assemblyPostProcessorType属性时,问题就消失了。

根据MSDN :“通常这表示编译器中生成程序的错误。”

首先,我要确保您在Windows,.NET和Visual Studio上安装了所有更新。

您还应该在Microsoft支持上查看Q312544 。

这样的问题可能是由编译后操作程序集IL的工具中的错误引起的,例如,如果您使用的是Fody及其插件。 至少在Fody MethodDecorator中有一个导致这种效果的错误,请参阅https://github.com/Fody/MethodDecorator/issues/8

-uncheck“代码优化”(包括引用的dll) – 升级到.net框架4.6

我通过执行以下操作解决了此问题:

  • 将C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Team Tools \ Performance Tools \ vsinstr.exe重命名为C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Team Tools \ Performance Tools \ vsinstr.exe.broken
  • 将C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Team Tools \ Performance Tools \ vsinstr.legacy.exe重命名为C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Team Tools \ Performance Tools \ vsinstr.exe
  • 重建解决方案