Как создать пользовательскую библиотеку базовых классов .NET (BCL) или замену mscorlib? - PullRequest
9 голосов
/ 15 сентября 2010

Кто-нибудь знает, как заставить кастомную BCL работать со стоковой CLR ?Как обнаружить существующие наиболее существенные связи между CLR и BCL и повторно использовать их?

Вот что я имею до сих пор: http://lightnet.codeplex.com

Ответы [ 4 ]

6 голосов
/ 20 сентября 2010
  • Ознакомьтесь с Script # , инструментарием для компиляции C # в Javascript, который был написан кем-то, работающим в Microsoft, и используется внутри некоторых из их веб-приложений.Парень делает это, заставляя вас компилировать / nostdlib и ссылаться на его минимально переопределенный BCL.После того, как сборка произведена, инструмент просматривает ее и превращает в Javascript.Он использует повторно реализованный BCL для обеспечения точной отладки и предотвращения использования функций BCL, которые не имеют смысла в контексте Javascript.Это выглядит поразительно, как ваш код сейчас, в том числе тот факт, что большинство классов либо пустые сами, либо имеют только несколько пустых методов.Это потому, что реализация классов / методов BCL в Javascript, вместо этого.

  • Это может быть патентное минное поле.Я узнал об этом из недавнего судебного процесса Oracle: на вас распространяется обещание сообщества только в том случае, если вы реализуете BCL для спецификации (хотя, в отличие от Java, вам не нужно реализовывать CLR вместе с ним. Да, освобождение от патентов Microsoft является болеелиберальнее, чем у Java).Я думаю, что это фантастическая идея, которая может быть полезна во многих ситуациях;Я могу себе представить, что я использую это вместо DSL, или вместо того, чтобы встраивать язык сценариев, или вместо того, чтобы педантично беспокоиться о безопасности кода в моей архитектуре плагинов.Но подумайте об этом с точки зрения Microsoft - если они допустили патентные исключения для несоответствующих BCL, что может помешать кому-либо назвать свой проприетарный продукт «несоответствующей реализацией BCL» и пожинать исключения?

5 голосов
/ 15 сентября 2010

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

I сильно сомневаюсь, что это сработает.CLR и BCL, скорее всего, будут иметь довольно много связей друг с другом - они будут иметь определенные ожидания в отношении реализации и будут полагаться на них, а не безосновательно.Например, CLR может опираться на определенные внутренние типы, о которых вы не знали бы.

Я был бы весьма удивлен, если бы вам удалось заставить стандартный CLR работать с вашей собственной реализацией BCL, хотя это, вероятно,значительно упростить реализацию настраиваемого BCL для работы со средой Mono - по крайней мере, там вы сможете отлаживать то, что происходит, если столкнетесь с проблемами.

1 голос
/ 05 ноября 2010

Надеюсь, это не древняя нить, которую я копаю, но год не вижу;если предположить, что это было месяц или два назад (около 10 сентября) ...

В любом случае, для меня это звучит бесполезно, кроме академических целей и просто веселья / обучения.И я подозреваю, что он потерпит неудачу, если вы не используете декомпилятор, чтобы увидеть, как выглядит внутренний интерфейс BCL, и убедиться, что ваша реализация соответствует тому, что ожидает CLR по умолчанию;в качестве альтернативы, ознакомьтесь с реализацией Mono.

Я думаю, что это бесполезно для практических целей, потому что Microsoft .NET BCL является чрезвычайно надежной реализацией, и я сомневаюсь, что один человек или небольшая команда могут добиться большего успеха.Нужен легкий вес?Это то, для чего предназначена среда .NET CE, и она хорошо работает на небольших устройствах.Кто-то также упомянул .NET MF (Micro Framework);и это один легкий MF'er, если имя делает это справедливо.:)

Единственный способ, которым я вижу практическое использование для этого, был бы, если бы вы полностью повторно внедрили CLR / CLI / CLS (и хорошо, "CL-все") самостоятельно исоздайте свою собственную реализацию .NET для какой-либо другой платформы.

РЕДАКТИРОВАТЬ: обратите внимание, если вы используете любую другую часть .NET, он использует стандарт BCL;так что вы не избавитесь от этого, и он все еще будет необходим.Плохо, если вы пытаетесь запустить это на платформе, где стандартной реализации .NET не существует, но я не думаю, что это то, что вы делаете ...

0 голосов
/ 16 сентября 2010

Даже если бы вы могли написать свой собственный BCL, как бы вы получили любой другой код для его использования?Весь такой код построен на основе фактического BCL и ожидает строгие имена, используемые в сборках BCL.

...