2009-11-12 1 views
3

Скажем, я начал проект C# под Windows (Visual Studio 2008), и я хочу переключиться на Mono. Нужно ли перекомпилировать все зависимости, которые использует мой проект, например, NHibernate и каждая внешняя зависимость?Все зависимости, используемые в монопроекте, должны быть скомпилированы с помощью mono

Примечание 1: Причина, по которой я задал этот вопрос, заключается в том, что я построил проект с MonoDevelop на Ubuntu 9.10, и все прошло как шарм, но когда я попытался отладить запуск некоторых тестов, написанных с помощью NUnit, все просто застыло. Мне нужно отменить текущий тест, чтобы получить резервную копию MonoDevelop, и нет четкой трассировки стека или подсказки, которую я мог бы использовать, чтобы найти проблему. Поэтому, хотя, возможно, мне нужно будет скомпилировать NHibernate (и другие зависимости) в Mono/Linux.

ответ

6

Нет, вам не нужно перекомпилировать библиотеки DLL, которые ссылаются на код, скомпилированный с использованием компиляторов Mono.

Однако, если ваш пользователь выполняет приложение в Mono, а не в структуре Microsoft.NET, а DLL содержит вызовы, которые не поддерживаются каркасом Mono, они столкнутся с проблемами.

Mono migration tool, который может анализировать ваши DLL-файлы, чтобы узнать, содержат ли они какие-либо вызовы, которые не поддерживаются пользователями с Mono.

Аналогичным образом библиотеки DLL, скомпилированные с использованием компиляторов Mono, могут ссылаться на код, который скомпилирован с использованием компилятора Microsoft.

2

См. Раздел Is Mono Binary Compatible with Windows? в разделе FAQ.

Ответ заключается в том, что mono является бинарным, поэтому нет необходимости перекомпилировать.

1

Как говорили другие, они совместимы с бинарными.

В качестве примера мне недавно понадобилось использовать файл Mono.Cecil.dll, чтобы избежать некоторой боли, основанной на отражении от AppDomain, которую я испытывал, и смог захватить последнюю версию, созданную компилятором Mono, и он работал на моем компьютере. NET 3.5 без проблем.

Конечно, если вы планируете работать в Linux или что-то другое, кроме Windows, вы должны полагаться на то, что эти сборки правильно написаны, поэтому используйте Environment.NewLine, Path.Combine и т. Д. Вместо кода, специфичного для Windows.

Смежные вопросы