InvalidProgramException / Common Language Runtime检测到无效程序
这是我在很长一段时间内看到的最奇怪的编程问题。
我正在使用Microsoft Visual C# 2010 Express
, C#
和.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中的其他InvalidProgramException
和Common 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
- 重建解决方案