Для передачи динамического объекта Expando другому классу требуется Microsoft.CSharp.dll?

Я построил функцию:

 string removeFile(HttpContext context,HttpRequest r)
 {       
       dynamic d = new ExpandoObject() ;
       d.ItemCommand = r["itemId"].ToString();
       ...
       ...
       int res = new PolicyDal().Admin_Kits_AttachFile(d); //sending here the d.

в другом классе/файле:

   public int Admin_Kits_AttachFile(dynamic d)
   {
        DbCommand command = _webERPDB.GetStoredProcCommand("Admin_Kits_AttachFile");
        _webERPDB.AddInParameter(command, "@ItemCommand", DbType.String, d.ItemCommand);

Возникает следующая ошибка:

Не удается найти один или несколько типов, необходимых для компиляции динамического выражения. Вам не хватает ссылок на Microsoft.CSharp.dll и System.Core.dll?

Я ссылался после того, как нашел DLL в ФАЙЛОВОЙ СИСТЕМЕ, поскольку ее не было в обычном меню добавления ссылки.

это почему ? почему не компилируется? почему они не поместили dll в обычное меню добавления ссылок? (Мне пришлось найти dll в файловой системе...)


person Royi Namir    schedule 11.12.2011    source источник


Ответы (2)


Эта сборка содержит DLR. Если вам нужно использовать динамическую диспетчеризацию в вашем приложении, на нее должна быть ссылка. Он добавляется в качестве ссылки по умолчанию при запуске нового приложения в VS 2010 (консоль, WinForms, ASP.NET, библиотека классов).

почему они не поместили dll в обычное меню добавления ссылок?

Собственно сделали:

введите здесь описание изображения

person Darin Dimitrov    schedule 11.12.2011
comment
Я могу поклясться, что раньше этого не было - person Royi Namir; 11.12.2011
comment
Вы нацеливались на .NET 4.0, когда его не было? Кроме того, этот список теперь заполняется асинхронно, поэтому, возможно, когда вы просматривали его изначально, он еще не был полностью загружен. - person Darin Dimitrov; 11.12.2011

Эта ошибка всегда возникает, когда вы используете какую-либо функцию динамического объекта. Complier выдаст ошибку об отсутствии Microsoft.CSharp.dll и System.Core.dll.

введите здесь описание изображения

Причина этой проблемы заключается в том, что все динамические объекты должны быть динамически сгенерированным классом во время выполнения, как показано на следующем изображении.

введите здесь описание изображения

Чтобы решить эту проблему, вы просто добавляете ссылку на «Microsoft.CSharp.dll», чтобы позволить среде выполнения динамически компилировать динамический объект, как показано на изображении ниже.

введите здесь описание изображения

person Soul_Master    schedule 11.12.2011