我们是否无法在 .NET 4.0 中的通用对象中使用 Interop 对象?

2024-06-24

我正在 VS 2010 中工作,致力于将我们的应用程序升级到 .NET 4。该应用程序是以 Excel 为基础构建的,我们希望利用 .NET 的一些改进来使用 Excel。但我遇到了一个奇怪的错误,该错误似乎是由在通用字典中使用 Excel Interop 对象引起的。这是生成的错误:

C:\MyApp\TheAssembly\MyClass.cs(823,57): 
error CS1769: Type 'MyApp\OtherAssemply.IMyController.SheetReports' from assembly 'c:\MyApp\OtherAssemply.\bin\Debug\OtherAssembly.dll' 
 cannot be used across assembly boundaries because it has a generic type 
 parameter that is an embedded interop type.

这是存在问题的实际属性:

Dictionary<Excel.Worksheet, IReportSheet> SheetReports { get;}

我们是否无法在通用对象中使用 Interop 对象?如果是这样,这就是 .NET 4.0 中的一个严重限制。我尝试将 Embed Interop 属性设置为 false,但这似乎没有改变任何内容。请告诉我是否有任何解决办法。


阿德里安给出了几乎正确的答案,但有更好的方法来处理这个错误。不要关闭嵌入互操作类型,而是使用通用接口:

IDictionary<Excel.Worksheet, IReportSheet> SheetReports { get;} 

CLR 4.0 引入了类型等效的概念。如果我们稍微简化一下这意味着什么,那么我们可以说 CLR 4.0 将两个具有相同命名的接口类型(具有相同的 Guid 属性)视为同一类型。请注意,类型等效性非常深入地构建在系统中,并且使得使用等效类型就好像它是一种类型一样。例子很少; 1. 您可以使用反射来调用实现等效接口的对象上的接口方法。 2. 泛型的实例接口在等效接口上参数化也被认为是等效的。

C# 和 VB 编译器利用此功能来实现“嵌入互操作类型”功能。

现在来说说例外情况: 1. 等效接口 System.Type 之间的引用比较将失败,因为它们仍然是类型系统中的两种不同类型:

typeOfWorkbookFromAssemblyA.Equals(typeOfWorkbookFromAssemblyB) == false

但有一个新的 API Type.IsEquivalentTo

typeOfWorkbookFromA.IsEquivalentTo(typeOfWorkbookFromB) == true
  1. 同一泛型的两个实例class在等效接口上参数化不被认为是等效的。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们是否无法在 .NET 4.0 中的通用对象中使用 Interop 对象? 的相关文章

  • Excel VBA 组合框识别

    我的用户表单上有 4 个以上的组合框 当他们触发时 他们触发相同的事件 我想做的是找出哪个 ComboBox 触发了该事件 组合框的创建取决于组件的数量 生成组合框的代码如下所示 For j 0 To UBound ComponentLis
  • VBA 中的 Excel 下拉列表:“无法获取工作表类的 DropDowns 属性”

    我有这个代码 Sub addDropdown Name ActiveSheet DropDowns Add 74 25 60 188 25 87 75 Select Set n ActiveSheet DropDowns Name If N
  • Excel 单元格对齐:例如数值xlLeft、xlRight 还是 xlCenter?

    我一直在尝试对齐 Excel 单元格文本值 我尝试过更常见的xlLeft xlRight但这似乎不起作用 错误是xlLeft没有宣布 我正在使用 Visual Studios 并使用 VB 创建一个 aspx 页面 这是我的代码示例 Dim
  • 使用 C# 的高级过滤器 excel

    我需要在Excel工作表中做一个过滤器 我想知道是否可以做这样的过滤器 List
  • 基于两列值的VLOOKUP

    我有一个表 其中一列包含用户 ID 这些被多次输入以显示特定主题的结果 ID Topic Pass Fail 71086686 Science P 71086686 Maths P 71086686 Tech P 71086686 ICT
  • Excel 2010 中隐藏行的宏

    我对 VBA 编程有点陌生 我在互联网上阅读了一些内容 但找不到我需要的内容或无法使其正常工作 我的问题 在工作表 表 1 的单元格 B6 中 给出了项目将被利用的年数 在工作表 sheet 2 和 sheet 3 中 我制作了 50 年的
  • Excel 仅粘贴特殊使用值,还将值的数据类型与值一起复制到目标单元格中

    我一直在尝试更多地了解 Excel 单元格 特别是它们的数据类型 如果有人对细节感兴趣 我的调查位于下面的编号点中 我的结论被标记为 A 到 D 我真的很感兴趣是否有人有什么可以补充的 答 每个 Excel 单元格都有一个属性 用于定义它将
  • Excel HTTP 获取超时

    我们有这个小子 它只是将数据泵入远程服务器 一切都按预期进行 前几天 网络服务器发生了一次持续大约一个小时的事件 我仍然可以 PING 服务器 但 IIS 没有响应 结果 宏只是挂起等待响应 关于快速通过 失败测试或超时有什么想法吗 Sub
  • 在 VBA 中声明字典

    我收到错误Run time error 424 Object required当我尝试在 VBA 中创建字典时 我的代码如下所示 Private Sub data Dim dicti As Object Set dicti CreateOb
  • 如何检查单元格是否包含通配符星号 (*) 字符

    考虑以下两个公式 IF SEARCH A1 true false IF SEARCH CHAR 42 A1 true false 我正在用它来尝试检测单元格是否包含 字符 但这对所有单元格返回 true 我只能假设 Excel 看到 也许作
  • 使用字符串数组作为子字符串参数的 VBA InStr 函数 (Excel)

    找了很久了 第一次提问 目标 循环遍历包含地址的列 根据单元格包含的邮政编码为单元格偏移 0 6 分配一个值 城市名称 这是我到目前为止所得到的 缩短的数组长度 Sub LabelCell Dim SrchRng As Range cel
  • 将异步调用变成同步调用

    将异步调用转变为同步有什么好的实践 模式 吗 我有一个第三方库 它的方法都是异步的 要获得几乎任何方法的结果 您必须侦听事件 这将带来一些上下文 基本上它看起来像 service BeginSomething service OnBegin
  • 修剪工作簿中的所有单元格(VBA)

    我尝试向一直在开发的 Excel 加载项添加功能 该功能会修剪已用单元格末尾的前导空格 甚至可能解析文本 我需要这样做的原因只是为了将其变成超链接我已经在工作了 但是那部分很好 这是我到目前为止所尝试的 我已经修剪了active works
  • 获取数据后关闭EXCEL应用程序进程

    我正在尝试通过以下方式从列表中的 Excel 文件获取列数据 private void Form1 Load object sender EventArgs e Excel Application xlApp new Excel Appli
  • 尝试访问 Delphi 7 中的 Excel 表时的提供程序选择

    我正在尝试使用 TAdoConnection 组件从 Delphi 7 连接到 Excel 表 问题是当我选择 Microsoft Jet OLEDB 4 0 Extended Properties Excel 8 0 时 我有时会收到错误
  • 刷新电量查询VBA

    因此 我使用下面的代码来刷新我的查询连接 但是 如果由于 wtv 原因刷新失败 如何显示消息 因为此 VBA 显示刷新已完成 即使我的查询存在多个错误 Worksheets Details Unprotect Dim Connection
  • excel vba范围单元格错误对象定义[重复]

    这个问题在这里已经有答案了 我一直在 Excel 中开发一个宏 该宏对一张工作表 次要 中的表格进行排序 当满足条件时 它应该将该表中的数据添加到第二张工作表 Sheet1 中的另一个表格中 但是我一直运行时出现 1004 错误 对象未定义
  • 有没有办法加快此 VBA 宏的运行速度,以在大范围内执行 1000 次 Vlookup?

    Sub Questionnaire to Ventilation Questionnaire to Ventilation Macro Keyboard Shortcut Ctrl Shift M Application ScreenUpd
  • 选择或复制三个不相邻的单元格 3

    如何使用复制 3 个不相邻的单元格ActiveCell Row Range A ActiveCell Row C ActiveCell Row E ActiveCell Row Copy Update 欲了解更多信息 请遵循 https y
  • VBA在选择范围内选择随机行

    我只是想在用户选择的范围内选择随机行 然而 有时程序会选择特定范围之外的随机行 请参阅下面的代码摘录 Dim PopulationSelect As Range Set PopulationSelect Application InputB

随机推荐