Я бы порекомендовал начать с MSDN: http://msdn.microsoft.com/en-us/library/dd233052.aspx
По сути, DLR существует в двух версиях: одна поставляется с .NET 4, другая - с открытым исходным кодом на codeplex.
DLR в .NET является частью System.Core.Однако для работы с DLR языкам и фреймворкам нужны свои собственные механизмы связывания.В случае C # это средство связывания времени выполнения C #, которое находится в Microsoft.CSharp.dll.Таким образом, все, что вы объявляете «динамическим» в C #, сначала обрабатывается механизмом связывания среды выполнения C #, а затем переходит в DLR.
DLR в кодплексе, очевидно, нуждался в собственной DLL (которая теперь называется Microsoft.Scripting).По сути, DLR начался, когда парни из IronPython поняли, что то, что они делали, может использоваться в большем количестве мест, чем просто IronPython.Поэтому они реорганизовали код и создали отдельный слой DLR.Этот слой DLR был позже включен в .NET, и именно здесь две версии разветвлены.
. Версия .NET фактически имеет меньше возможностей, чем версия с открытым исходным кодом.Итак, если вы хотите, скажем, разработать свой собственный динамический язык в .NET, используйте версию с открытым исходным кодом.Если какая-то команда MS решает поддерживать динамические функции (как это делали в Silverlight), им обычно приходится работать с той, которая есть в .NET Framework.
Если вы просто используете динамические функции C #, вы в основном ненужно вообще беспокоиться о DLR (единственная интересная вещь для вас может быть пространством имен System.Dynamic, которое предоставляет несколько хороших классов, таких как ExpandoObject и DynamicObject).Еще одно пространство имен, интенсивно используемое DLR (но не строго его частью), - это System.LINQ.Expressions, который используется для операций с деревьями выражений.В этом выпуске он был расширен для DLR, и его можно найти как в версии с открытым исходным кодом DLR, так и в .NET Framework.