1

我已经建立了一个功能:

 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 的引用

我在 FILE SYSTEM 中找到 DLL 后引用了它,因为它不在常规的添加引用菜单中。

这是为什么 ?为什么它不会编译?为什么他们没有将 dll 放在正常的添加参考菜单中?(我必须在文件系统中找到 dll ......)

4

2 回答 2

4

此程序集包含 DLR。如果您需要在应用程序中使用动态调度,则必须引用它。当您在 VS 2010(控制台、WinForms、ASP.NET、类库)中启动新应用程序时,默认将其添加为参考。

为什么他们没有将 dll 放在正常的添加参考菜单中?

实际上他们做到了:

在此处输入图像描述

于 2011-12-11T09:50:33.300 回答
3

当您使用有关动态对象的某些功能时,总是会发生此错误。编译器将抛出有关缺少 Microsoft.CSharp.dll 和 System.Core.dll 的错误。

在此处输入图像描述

这个问题的原因是所有动态对象都需要在运行时动态生成类,如下图所示。

在此处输入图像描述

要解决此问题,您只需添加对“Microsoft.CSharp.dll”的引用,以允许运行时动态编译动态对象,如下图所示。

在此处输入图像描述

于 2011-12-11T10:05:09.860 回答