2011-12-11 50 views
1

我有建立一个函数:传递给其他类的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 ...)

回答

4

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

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

事实上他们做到了:

enter image description here

+0

我可以发誓,它不是有 –

+0

是你的目标之前,.NET 4.0,当它不存在?此外这个列表现在是异步填充的,所以也许当你在看它时,它还没有完全加载。 –

+0

是的............ –

3

当您使用有关动态对象的一些特点这个错误总是会发生的。编译器会抛出有关缺少Microsoft.CSharp.dll和System.Core.dll的错误。

enter image description here

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

enter image description here

为了解决这个问题,你只需要添加引用“Microsoft.CSharp.dll”允许运行时动态编译动态物体像下面的图片。

enter image description here

+0

非常感谢你的可爱答案。 –

相关问题