在vb.net项目上使用时,C#DLL不起作用
发布时间:2020-12-17 00:18:31 所属栏目:大数据 来源:网络整理
导读:我正在使用vb.net 2013. 我尝试使用我使用NUGET安装的工具. EntityFramewrok.Utilities / link: https://github.com/MikaelEliasson/EntityFramework.Utilities 这是一个开源的DLL,可以下载整个代码. 从这个DLL,我正在尝试使用“IncludeEFU”方法. 在上面的
我正在使用vb.net 2013.
我尝试使用我使用NUGET安装的工具. EntityFramewrok.Utilities / link: https://github.com/MikaelEliasson/EntityFramework.Utilities 这是一个开源的DLL,可以下载整个代码. 从这个DLL,我正在尝试使用“IncludeEFU”方法. 在上面的链接中,是我在C#项目上使用的代码并且有效: var result = db.Contacts .IncludeEFU(db,x => x.PhoneNumbers .Where(n => n.Number == "10134") .OrderBy(p => p.ContactId) .ThenByDescending(p => p.Number)) .ToList(); 我尝试在我的VB.net应用程序上使用相同的代码: Dim result = db.Contacts _ .IncludeEFU(db,Function(x) x.PhoneNumbers _ .Where(Function(n) n.Number = "10134")_ .OrderBy(Function(p) p.ContactId) _ .ThenByDescending(Function(p) p.Number)).ToList() 但我收到一个错误: An unhandled exception of type 'System.ArgumentException' occurred in EntityFramework.Utilities.dll Additional information: Could not find a MemberExpression 逐个检查dll项目中的文件(可以在链接上下载),我看到我收到的错误消息来自这个子: private static PropertyInfo SetCollectionModifiersAndGetChildProperty<T,TChild>(Expression<Func<T,IEnumerable<TChild>>> collectionSelector,List<MethodCallExpression> childCollectionModifiers) where T : class where TChild : class { var temp = collectionSelector.Body; while (temp is MethodCallExpression) { var mce = temp as MethodCallExpression; childCollectionModifiers.Add(mce); temp = mce.Arguments[0]; } childCollectionModifiers.Reverse(); //We parse from right to left so reverse it if (!(temp is MemberExpression)) { throw new ArgumentException("Could not find a MemberExpression","collectionSelector"); } var childProp = (temp as MemberExpression).Member as PropertyInfo; return childProp; } 看看这一行: throw new ArgumentException("Could not find a MemberExpression","collectionSelector"); 为什么这是在C#项目上工作,并在VB.net项目上产生这个错误? 编辑:我尝试在该子目录中进行一些更改: ... while (temp is MethodCallExpression) { var mce = temp as MethodCallExpression; childCollectionModifiers.Add(mce); temp = mce.Arguments[0]; } while (temp is UnaryExpression) { var ue = temp as UnaryExpression; temp = ue.Operand; } ..... 重建dll文件后,现在错误消息消失了.
最初的EntityFramework.Utilities DLL可能是使用与VB.NET应用程序不同的.NET“目标框架”构建的.
这可以解释为什么原始DLL在您重建的DLL(使用在VS.NET 2013中为您的项目定义的相同.NET“目标框架”)确实有效时不起作用. 要检查VS.NET的“目标框架”,请右键单击解决方案资源管理器中的适用项目,然后单击“属性”选项. “应用程序”选项卡将显示“目标框架:”标签,其中包含可用的.NET Framework版本号的下拉输入.此下拉列表的当前设置是.NET“目标框架”,用于在VS.NET 2013中进行构建. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |