Вопрос

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top