由于|字符,使用nunit测试的Windows上的单开发崩溃

本文关键字:单开发 开发 崩溃 Windows 字符 使用 nunit 由于 测试 | 更新日期: 2023-09-27 18:28:42

我正在使用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 build.。这意味着我不能运行程序,但我可以Unit Test

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

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

有人知道该怎么办吗?如果有解决方案的话,"file a bug report"也很好。

由于|字符,使用nunit测试的Windows上的单开发崩溃

这肯定是一个错误,您对该问题的诊断看起来是正确的。请将其存档在http://bugzilla.xamarin.com.

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

这可能没有任何问题,因为您可能根本不需要将平台设置为x86。这个解释相当复杂,但我还是试一试。

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

AFAIK,通过使可执行项目默认以x86为目标,MS做到了这一点,这样开发人员就不会在p/调用仅存在于32位Windows上的库时遇到问题。由于大多数程序不需要在x64模式下运行,因此这可能是值得权衡的。

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

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

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