如何消除Type Library Exporter针对Microsoft.Office.Interop.Excel.Range与Worksheet类型的警告?
如何消除Type Library Exporter针对Microsoft.Office.Interop.Excel.Range与Worksheet类型的警告?
我来给你几个实用的解决思路,不用每次都把参数转成object再强制转换:
检查并注册互操作程序集
这个警告很多时候是因为Excel互操作程序集没在系统里正确注册。你可以手动注册NuGet包对应的Microsoft.Office.Interop.Excel.dll:- 找到NuGet包安装路径下的该DLL(一般在项目的
packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/lib/net40目录里) - 用管理员权限打开命令提示符,定位到.NET Framework的
regasm.exe路径(比如C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe,根据你的.NET版本调整) - 运行命令:
regasm.exe /codebase "你的DLL完整路径"
- 找到NuGet包安装路径下的该DLL(一般在项目的
改用Excel互操作的接口类型
Excel的Worksheet和Range其实都有对应的底层接口:_Worksheet和_Range。你可以把方法参数换成这些接口类型,比如把代码里的:Public Sub CreateCFTOutput(wsOutput As Worksheet, i As Integer, year As Integer, firstCell As Range, rtsInput As Range, fixedInterest As Range) _ Implements IJupiterConnector.CreateCFTOutput修改为:
Public Sub CreateCFTOutput(wsOutput As _Worksheet, i As Integer, year As Integer, firstCell As _Range, rtsInput As _Range, fixedInterest As _Range) _ Implements IJupiterConnector.CreateCFTOutput这样类型库导出器能准确识别到接口的类型定义,就不会报找不到类型库的警告了。
调整项目的COM可见性设置
如果你的项目不需要对外暴露COM接口,可以右键项目→属性→应用程序→程序集信息,取消勾选“使程序集COM可见”。这样类型库导出器就不会去处理这些Excel互操作类型,警告自然就消失了。要是必须保留COM可见性,可以单独设置相关类的COM可见性,而非整个程序集。更新Interop.Excel NuGet包
你当前使用的15.0.4795.1001版本可能存在兼容性问题,试试更新到更稳定的新版本(选择和你本地Excel版本兼容的包)。新版本通常会修复类型库导出的相关问题,不过更新后要注意检查代码里的类型引用是否需要调整。
备注:内容来源于stack exchange,提问作者MartinS




