我已经建立了一个功能:
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 ...)
答案 0 :(得分:4)
此程序集包含DLR。如果需要在应用程序中使用动态分派,则必须引用它。在VS 2010(控制台,WinForms,ASP.NET,类库)中启动新应用程序时,默认情况下会将其添加为参考。
为什么他们没有把dll放在普通的添加参考菜单中?
实际上他们做了:
答案 1 :(得分:3)
当您使用有关动态对象的某些功能时,始终会发生此错误。 Complier将抛出有关缺少Microsoft.CSharp.dll和System.Core.dll的错误。
此问题的原因是所有动态对象都需要在运行时动态生成类,如下图所示。
要解决此问题,您只需添加对“Microsoft.CSharp.dll”的引用,以允许运行时动态编译动态对象,如下图所示。