Monodevelop аварийно завершает работу в Windows с помощью nunit test из-за | персонаж - PullRequest
0 голосов
/ 21 марта 2012

Я использую 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 голосов
/ 22 марта 2012

Это определенно ошибка, и ваш диагноз проблемы выглядит правильно.Пожалуйста, отправьте его по адресу 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 / Invoking, которые существовали только в 32-битной Windows.Поскольку большинству программ не требуется работать в режиме x64, это, вероятно, стоило компромисса.

Процесс x86 может загружать библиотеки AnyCPU очень хорошо, поэтому новые библиотечные проекты всегда имеют имя конфигурации AnyCPU, ине устанавливайте флаг компилятора.Обычно VS создает «смешанные» конфигурации решений, которые сопоставляются с исполняемыми проектными конфигурациями x86 и проектными проектами библиотеки AnyCPU.

К сожалению, MonoDevelop слишком усердно работает над созданием конфигураций с одинаковыми именами во всех проектах, даже если они ненужно или не имеет смысла.Скорее всего, MD создал x86-именованные конфигурации для ваших библиотечных проектов, включая тестовый проект NUnit.У них не будет установлен флаг компилятора x86, и он вам в любом случае не понадобится, поэтому вы можете удалить их и сопоставить все конфигурации решения с конфигурациями библиотеки AnyCPU.

Обратите внимание, что когда MD запускаетТесты NUnit загружают тестовую библиотеку, используя собственный исполняемый файл процесса удаленного хоста, который помечен как x86.Таким образом, тесты в любом случае будут выполняться в x86, даже на 64-битной Windows.

...