c# - 带有 COM 互操作的 Resharper 提示 "Cannot access internal constructor"

标签 c# resharper com-interop

我有一个使用 VB6 构建的 OCX 文件,我想从 C# 访问它。所以我在 C# 项目中添加了对 OCX 的引用,然后添加代码以从 OCX 实例化对象:

    var blah = new Blah();

这编译得很好,没有错误或警告,而且它似乎像我预期的那样工作——我可以调用 blah 对象上的方法,它们似乎做了我期望它们做的事情。但是,如果我转到解决方案中的 ReSharper/检查/代码问题,ReSharper 会提示上面引用的行是“C# 编译器错误”,说“无法在此处访问内部构造函数‘BlahClass’”。

因为它声称这是一个 C# 编译器错误,但它似乎编译(实际上工作)很好,我猜这只是 ReSharper 本身的问题。但是,我对此很陌生,我想确定一下。也许我正在做的不是从 OCX 或类似的东西实例化对象的正确方法?

我正在使用 VS2012 Professional 和 ReSharper 7.1.3。

最佳答案

C# 编译器查看该 coe 并看到“动态”代码的调用(其对象的代码在执行开始后可能具有可用的新方法/属性),因此不能确定任何特定的方法/属性 't 在编译时存在。 Resharper 试图通过找出可能在运行时失败的情况来提供更多帮助。它可能正在使用该类的过时描述(类型库)来做出决定。或者,对该类的描述与代码实际执行的操作不同步。仅根据您发布的内容很难判断这是好事还是坏事。如果“有效”,这似乎是一件好事;但这是非常主观的——这可能是一个等待发生的问题。

我会认为这是可疑的,并且可能会联系供应商以确保其中没有潜伏的东西会在以后引起问题。

关于c# - 带有 COM 互操作的 Resharper 提示 "Cannot access internal constructor",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18255820/

相关文章:

c# - 解决 COM 相关错误 0x80040154 的技巧?

c# - 如果有的话,我们什么时候应该使用 const?

C# 我可以使用 enum 作为 for 循环来代替 int

c# - 字段封装的不同重构风格 : how to make Visual Studio change it?

resharper - StyleCop for Resharper - 禁用检查只读文件

refactoring - 是否可以使用 NDepend 来查找 OOP 语言中的类分区?

vb.net - OCX控制: Sub New() is not accessible in this context because it is 'Private'

c# - 如何通过互操作公开 COM 库中定义的枚举作为 C# 函数的返回类型

c# - 字符串或二进制数据将被截断 - 添加新行( Entity Framework )

c# - 求助foreach,得到 'possible multiple enumeration of IEnumerable'