Все ли зависимости, используемые в моно-проекте, должны быть скомпилированы с моно - PullRequest
3 голосов
/ 12 ноября 2009

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

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

Ответы [ 3 ]

6 голосов
/ 12 ноября 2009

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

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

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

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

2 голосов
/ 12 ноября 2009

См. Совместим ли Mono Binary с Windows? в разделе часто задаваемых вопросов Mono.

Ответ в том, что mono совместим с двоичным кодом, поэтому вам не нужно перекомпилировать.

1 голос
/ 12 ноября 2009

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

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

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

...