Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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
C# 由于|字符,Monodevelop在使用nunit测试的Windows上崩溃_C#_Crash_Nunit_Monodevelop - Fatal编程技术网

C# 由于|字符,Monodevelop在使用nunit测试的Windows上崩溃

C# 由于|字符,Monodevelop在使用nunit测试的Windows上崩溃,c#,crash,nunit,monodevelop,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...) 基本上,问题在于MonoDevel

我使用的是
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
调试| x86”
作为配置传递,然后尝试为其创建路径或文件夹,并由于|非法而获得异常。我可以创建一个没有|的配置,但是MonoDevelop会非常混乱。因为它假定这意味着“任何平台”,所以我不能进行
x86构建。
这意味着我不能运行程序,但我可以
单元测试它

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

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


有人知道该怎么做吗?如果有解决方案-
“提交错误报告”
也很好。

这肯定是个错误,您对问题的诊断看起来是正确的。请把它存档在

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

这可能没有什么问题,因为您可能实际上并不需要将平台设置为x86。解释很复杂,但我来试一试

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

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

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

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

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