由于|,使用nunit测试在Windows上进行Monodevelop崩溃字符

时间:2012-03-21 08:33:55

标签: 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 build.这意味着我无法运行该程序,但我可以Unit Test它。

我认为我目前的选项是对.sln.csproj文件进行文本攻击,直到两者都工作或只有两个解决方案配置为止。

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

任何人都知道该怎么办?如果有解决方案 - "file a bug report"也非常好。

1 个答案:

答案 0 :(得分:0)

这绝对是一个错误,你对该问题的诊断看起来是正确的。请在http://bugzilla.xamarin.com处提交。

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

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

MonoDevelop中的新桌面可执行项目具有“Debug | x86”和“Release | 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)加载测试库。因此,即使在64位Windows上,测试仍将在x86中运行。