Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net NUnit GUI偶尔会在桌面应用程序中抛出System.AccessViolationException_.net_Unit Testing_User Interface_Nunit_Devforce - Fatal编程技术网

.net NUnit GUI偶尔会在桌面应用程序中抛出System.AccessViolationException

.net NUnit GUI偶尔会在桌面应用程序中抛出System.AccessViolationException,.net,unit-testing,user-interface,nunit,devforce,.net,Unit Testing,User Interface,Nunit,Devforce,(我提出这个新问题是因为这是关于桌面应用程序的,它不是ASP.NET或ASP.NET MVC,我们不使用MVCContrib,这种现象不是特定于.NET版本的。) 我们使用NUnit和Moq,还有一些东西,比如Unity、IdeaBrade、DevXpress、Crystal Reports,仅举其中的一些。 症状:只使用nUnit GUI,这是不可预测的。有时它不会出现,但当某些事情发生时,很多测试都会失败,例如: CompanyName.Shared.Services.Test.UnitTe

(我提出这个新问题是因为这是关于桌面应用程序的,它不是ASP.NET或ASP.NET MVC,我们不使用MVCContrib,这种现象不是特定于.NET版本的。) 我们使用NUnit和Moq,还有一些东西,比如Unity、IdeaBrade、DevXpress、Crystal Reports,仅举其中的一些。 症状:只使用nUnit GUI,这是不可预测的。有时它不会出现,但当某些事情发生时,很多测试都会失败,例如:

CompanyName.Shared.Services.Test.UnitTests.ApplicationServicesTest.CanLogin\u登录失败时\u返回其他信息:
System.AccessViolationException:尝试读取或写入受保护内存。这通常表示其他内存已损坏。

如果系统进入这种状态,即使我关闭nUnit GUI并再次打开它,也没有任何帮助。唯一有帮助的是重新启动机器(!!!o_o)

这可能是nUnit GUI本身的一些错误吗?我只是说,因为我们有8500多个测试,这构成了一个巨大的treeview内容!如果所有测试都运行,nUnit将消耗2+GB RAM,并消耗大量句柄(我指的是Windows本机句柄“资源”)

我试过NUnit2.5.3和2.6.2,它们都受到影响。
我们的解决方案很长一段时间是VS2008,现在是VS2012。它似乎也不依赖于.NET版本。

代码库中的代码片段:`[DllImport(“kernel32.dll”,EntryPoint=“SetProcessWorkingSetSize”,ExactSpilling=true,CharSet=CharSet.Ansi,SetLastError=true)]私有静态外部int SetProcessWorkingSetSize(IntPtr hProcess,intDWMinimumWorkingSetSize,intDWMaximumWorkingSetSize);public void releaseunsedmemory(){GC.Collect();GC.WaitForPendingFinalizers();SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle,-1,-1);}`我删除了PInvoke,但它没有消除异常,-1,-1参数很特殊:它们指示系统将工作集大小减至最小。我认为这真的很糟糕,根据一些旧的MSDN Win32 API页面,它可能会导致进程从mem中调出。不要在家里做这种事,伙计们!它不会解决任何内存问题!为什么在我从VisualStudio运行测试时没有出现这种情况?结果表明,nUnit GUI和控制台默认在MTA线程单元模式下运行,而如果我从VS运行测试,它们将在STA中运行。我在一些多线程异步测试中注释了[StatThread],这些测试之前被[Ignore]忽略,导致它们(仅)在服务器上失败,但现在它们很好。AccessViolation异常可能与某些本机代码有关。我确信代码库中还有其他“牺牲山羊”类型的东西,比如上面的SetProcessWorkingSetSize(好吧,我搜索了PInvokes,除此之外没有发现太奇怪的东西),另外我们还有很多第三方依赖项,比如Crystal Reports。唉。