这是我在很长一段时间内看到的最奇怪的编程问题。
我正在使用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;
}
}
}
然后,此应用程序从dll
生成Visual C# 2010 Express
并在其他地方使用,一切正常。当我将另一个案例添加到上面的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,并且还从头开始创建了几次解决方案。
答案 0 :(得分:16)
只是想补充一下我的经验... 就我而言,我将C#Web API托管在Azure上,并且在尝试登录我的API时遇到此消息。 我必须进入我的Azure管理门户(portal.azure.com),转到App Services,选择我的Web API程序,然后从“概述”屏幕中单击“重新启动”。 此后,该程序再次正常运行。 在我的日志中找不到其他线索。
答案 1 :(得分:7)
升级到 Visual Studio 2017 v15.8.6 后,我遇到了这个问题。当我在assemblyPostProcessorType
的编译标记中删除了web.config
属性时,问题就消失了。
答案 2 :(得分:6)
尝试在应用程序池advanced settings中启用32位应用程序。
答案 3 :(得分:5)
我终于设法解决了这个问题。
我在C#Express中取消选中code optimization
并解决了这些问题。仍然是最奇怪的事情,但由于我们使用旧的工具和框架,我们不能真正责怪任何人。
答案 4 :(得分:2)
根据MSDN:“通常这表示生成程序的编译器中存在错误。”
首先,我要确保您已在Windows,.NET和Visual Studio上安装了所有更新。
您还应该在Microsoft支持上查看Q312544。
答案 5 :(得分:1)
在使用MSDeploy部署到Azure WebApp之后,我偶尔遇到此错误。重新部署后,该错误始终消失。
我们的构建和部署是两个不同的步骤,重新部署每次都发送完全相同的文件-这表明该问题并不是该问题答复中其他建议的唯一编译器问题。
可能是MSDeploy中的错误,也可能是Azure中用于WebApp的IIS版本中的错误...
答案 6 :(得分:1)
如果您的问题与部署到azure应用程序的Web API dotnetcore 有关,则可能是由应用程序洞察力引起的。在刀片级设置应用程序见解应该可以解决该问题。还请注意,在刀片服务器级别将其设置为recommended
与basic
似乎还没有解决。基本就是有效的价值。
遇到此问题时,将Web Api部署为Azure上的API应用。对任何端点的初始请求都将产生预期的响应;但是,后续请求将返回相同的公共语言运行时错误。我发现在Web应用程序的Application Insights刀片上启用“推荐”收集级别时开始出现问题。我设置推荐并启用所有单选按钮。恢复此更改将停止该错误。作为参考,我正在运行的API正在运行Microsoft.ApplicationInsights 2.8.1
答案 7 :(得分:1)
我通过以下操作解决了此问题:
答案 8 :(得分:1)
这样的问题可能是由编译后操作程序集IL的工具中的错误引起的,例如,如果您使用Fody及其插件。至少Fody MethodDecorator中有一个导致这种效果的错误,请参阅 https://github.com/Fody/MethodDecorator/issues/8
答案 9 :(得分:0)
-uncheck"代码优化" (包括参考的dll) - 升级到.net framework 4.6
答案 10 :(得分:0)
如果您遇到特定于 Azure Web Apps 的问题-检查已安装的扩展程序Microsoft.ApplicationInsights.AzureWebSites
-或友好名称Application Insights extension for Azure App Service和remove it via kudu。
我们发现此扩展程序可能会干扰 msdeploy 推送-IIS snapshotholder_x64.exe
进程下正在运行一个进程w3wp.exe
。有人可能通过azure门户启用了此扩展。
答案 11 :(得分:0)
我们从头开始获得[\w\W]
将已编译的网站复制到其他环境-运行正常。 复制到其他服务器上-正常工作。
我注意到,重置服务器(重新启动或重置应用程序池)时,此异常开始。在研究此问题时,我注意到Brian Reichle在16年6月6日12:33的评论
我希望位数不匹配会导致 BadImageFormatException而不是InvalidProgramException 问题中描述的内容。
我不熟悉XXX webservice Exception , System.InvalidProgramException: Common Language Runtime detected an invalid program.
异常,但是我熟悉InvalidProgramException
,其症状与我遇到BadImageFormatException
问题时的症状非常相似。我不能说100%为什么会发生两种异常,当前运行的理论是它在64位计算机上运行的32位应用程序,但是我们无法证明它,也无法永久修复它。在应用程序池上启用32位应用程序不能解决该问题。
我们知道的唯一解决方法(尽管是暂时的)只是简单地回收应用程序池。无需重新编译或任何东西。幸运的是,这种情况发生的频率不是很高,可能是一两个月一次。
答案 12 :(得分:0)
答案 13 :(得分:0)
这是我在IIS上托管时遇到的一个有趣的例外。在发现我在IIS上的.NET Framework版本不同于项目所使用的.NET Framework版本之后,我解决了该问题。请注意,如果您碰巧还有其他引用的项目/ ddl,请确保也更新了它们的.NET Framework版本。
答案 14 :(得分:0)
当我开始收到此错误时,我正在使用.net core 3.0在控制台应用程序中进行一些Powershell自动化。我猜.net核心与System.Management.Automation不兼容,所以我将其更改为.net framework 4.7,之后一切正常。
答案 15 :(得分:0)
在我的情况下,正是Hasp保护(谷歌:Hasp哨兵保护密钥)软件破坏了dll。
答案 16 :(得分:0)
分享我的经验:我的 WindowsForms 应用程序在 x86 计算机上遇到了同样的问题,发现我忘记复制所有 dll 重定向的 .exe.config 文件,之后一切都像魅力一样。