c# - 由于使用 nunit 测试,Monodevelop 在 Windows 上崩溃特点

标签 c# crash nunit monodevelop

我正在使用 Monodevelop 2.8.6.5 并尝试运行单元测试不断返回内部错误:

`ArgumentException`: Illegal characters in path
at System.IO.Path.CheckInvalidPathChars(string)
at ...
at ...
at MonoDevelop.NUnit.XmlResultsStore.GetRootRecord(string configuration...)

基本上,问题是 MonoDevelop.NUnit.XmlResultsStore.GetRootRecord 正在传递 "Debug|x86" 作为配置,然后尝试创建路径或文件夹,并获得异常,因为 |是非法的。我可以创建一个没有 | 的配置,但是 MonoDevelop 会变得非常困惑。因为它假定这意味着“任何平台”,所以我无法进行 x86 构建。这意味着我无法运行该程序,但我可以对其进行单元测试.

我当前的选择是对 .sln.csproj 文件进行文本破解,直到它们都工作或者只有两个解决方案配置,我想。

更令人困惑的是,我还没有在网上看到任何关于此问题的问题,这似乎是一个肯定的问题。

有人知道该怎么办吗?如果有解决方案 - “提交错误报告” 也完全没问题。

最佳答案

这绝对是一个错误,并且您对问题的诊断看起来是正确的。请提交至http://bugzilla.xamarin.com .

请注意,解决方案配置是要包含在构建中的一组项目及其要使用的配置的映射。解决方案配置的名称不必与项目配置匹配。这意味着您可以通过让 Debug|x86 解决方案配置使用单元测试项目的 Debug|AnyCPU 配置来解决该错误。

这可能没有任何问题,因为您可能实际上并不需要将平台设置为 x86。解释相当复杂,但我会尝试一下。

MonoDevelop 中的新桌面可执行项目具有“调试|x86”和“发布|x86”配置,以与 Visual Studio 兼容。将“x86”作为配置名称的平台组件实际上不会对二进制文件的编译或执行产生任何直接影响,但这些特定配置还将 C# 编译器选项的平台值设置为“x86”,它在编译的二进制文件中设置一个标志。对于可执行文件,此标志意味着当 Windows x64 执行二进制文件时,它使用 x86 .NET 运行时而不是默认的 x64 运行时。对于库,这意味着 x64 .NET 运行时将拒绝加载该库。 Mono 运行时完全忽略该标志。

据我所知,MS 通过将可执行项目默认以 x86 为目标,这样开发人员就不会遇到仅存在于 32 位 Windows 上的 P/Invoking 库的问题。由于大多数程序不需要在 x64 模式下运行,因此这可能是值得进行权衡的。

x86 进程可以很好地加载 AnyCPU 库,因此新的库项目始终具有 AnyCPU 配置名称,并且不设置编译器标志。 VS 通常创建映射到 x86 可执行项目配置和 AnyCPU 库项目配置的“混合”解决方案配置。

不幸的是,MonoDevelop 过于热衷于在所有项目中创建匹配命名的配置,即使它们不需要或没有意义。 MD 很可能为您的库项目(包括 NUnit 测试项目)创建了 x86 命名的配置。它们不会设置 x86 编译器标志,而且您也不需要它,因此您可以删除它们并将所有解决方案配置映射到 AnyCPU 库配置。

另请注意,当 MD 运行 NUnit 测试时,它会使用自己的远程主机进程可执行文件(标记为 x86)加载测试库。因此,无论如何,测试都将在 x86 中运行,甚至在 64 位 Windows 上也是如此。

关于c# - 由于使用 nunit 测试,Monodevelop 在 Windows 上崩溃特点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9801042/

相关文章:

c# - 在 Visual Web Developer 2008 Express 中使用 nunit

c# - NUnit 2.6.3 - 测试未使用消息执行 测试适配器发回未知测试用例的结果

c# string[] 与 IEnumerable<string>

ios - 应用程序在低网络中崩溃,例如(EDGE,100%丢失)

PHP 不处理堆栈溢出?

ios - 异常类型 : EXC_CRASH (SIGABRT)

c# - 是否有理由在界面中隐藏继承的成员?

c# - 有没有更快的方法来检查外部网页是否存在?

C#/异步网络和GUI之间的通信

visual-studio-2012 - 如何使用 VS2012、TFS Build 和 NUnit 从运行中排除测试