我正在为我的项目添加一个dll。我的项目在vb.net中,dll是用c#.net编写的。 当我将它添加到vb.net项目时,如果将相同的dll添加到c#项目中,则可用的属性与可用的属性不同(数量较少)。
添加到VB.Net项目时的对象浏览器视图
添加到c#项目时的对象浏览器视图
如果你在c#视图中看到,你可以访问vb.net中无法访问的“hits”和“facets”等属性。
任何人都可以帮我理解这个问题。
答案 0 :(得分:6)
VB.NET和C#之间存在差异。确保编译C#dll并将程序集属性CLSCompliant设置为true,这样编译器就可以确定所有公共文件是否与其他.NET语言兼容。
答案 1 :(得分:0)
为了澄清我的情况,我正在使用从github下载的dll。当我从github下载源代码时,我发现它不是CLSComplaint。当我更改属性名称并添加DataMember属性(用于jsonserilzation)时,所有属性也可以在vb.net项目中使用,但我将面临的问题是将代码更改合并到原始特定类库中的任何更新版本到CLSComplaint,我不想提交给GitHub,直到我与作者交谈。
作为解决方法,我添加了GetHitCount(CLSComplaint属性名称)
public int GetHitCount
{
get { return hits.total;}
}
这会暴露“hits”属性,该属性在将dll添加到vb.net项目时不可用。
答案 2 :(得分:0)
C#项目中的“命中”和“方面”可能会使类中的成员具有相同的名称,但具有不同的大小写。对于引用C#dll的VB项目来说,这是一个非常常见的问题,它也会导致C#dll不符合CLS标准。 VB不区分大小写,因此如果还有“Hits”成员,则无法确定需要哪些“命中” - 因此VB不会显示任何一个成员。
您仍然可以调用“点击”和“点”,但您需要使用“InvokeMember”来执行此操作(使用反射)。