System.Data в моно - PullRequest
       14

System.Data в моно

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

Был ли System.Data in Mono расширен для включения дополнительных функций? Я пытаюсь использовать анализатор SQL, написанный для Mono в Mono.Data.SqlExpressions, но когда все классы в пространстве имен SqlExpressions были включены, проект все равно не может скомпилироваться, потому что классы в System.Data не совпадают. 1001 * Например, System.Data.DataColumn не определяет событие PropertyChanged. Нужно ли мне вместо этого использовать библиотеки Mono System.Data? Когда в проект включен класс Mono DataColumn, эта ошибка компиляции не возникает (она ссылается на такие классы, как DataCategory, которых нет в платформе .Net).

В качестве альтернативы приветствуется любая помощь по переносу Sql Parser в Mono на платформу Microsoft .Net. Я попытался загрузить исходный код и добавить недостающие библиотеки в проект, но этот подход кажется ошибочным. Количество отсутствующих зависимостей, похоже, увеличивается вместо решения проблемы.

1 Ответ

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

Mono пытался быть двоичным и API-совместимым с реализацией MS. Это означает, что за исключением нескольких внутренних методов и классов поддержки, все API, предоставляемые Mono, должны соответствовать 101 с MS .Net. Это сделано для того, чтобы избежать сложностей, подобных тем, что люди предполагают, что метод существует, потому что он компилируется в Mono, а затем он не работает в MS.Net.

Когда новые участники и разработчики внедряют новый код и функции, он обычно включается в отдельную сборку и проект. Mono.Data, как следует из названия, является таким «расширением», поэтому имеет смысл включить все зависимые сборки, чтобы иметь возможность его построить. Если Mono.Data.dll и его приложения будут работать в MS.Net или нет, это вопрос или проверка документов и их тестирование.

Что касается вашего второго вопроса, я не могу рассказать вам о специфике, но если код не имеет особых инструкций для запуска в Windows, он, скорее всего, потребует много работы для переноса. Как и в случае любого API, большая часть кода не предоставляется общедоступным интерфейсам, и при переносе кода необходимо обойти внутренние функции реализации. Я бы посоветовал вам некоторое время проанализировать, как работает код, а затем попытаться заставить его работать в MS.Net, удалив столько ошибок в коде Mono, сколько это имеет смысл. В конце концов, если код достаточно совместим, вам следует рассмотреть возможность исправления исходного кода Mono с помощью инструкций компиляции и прагм #if! MONO, чтобы избежать проблем для будущих пользователей.

...