VS2010中出现无法嵌入互操作类型


  VS2010中出现无法嵌入互操作类型


针对word或excel操作时,出现VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法。


问了度娘,解决方法如出一辙:选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。问题轻松解决后,应该有很多人纠结这个“嵌入互操作类型”到底是个什么意思呢?下面让我慢慢的道来。(如果你时间不多,直接看红色字体部分)

 

 就软件而言,互操作性——这条术语用来描述的是不同的程序(programs)借助于同一套交换格式(exchange formats)来交换数据,读写相同文件格式(file formats)以及采用相同协议(protocols)的能力。(互操作性的这种定义并‘没有’期望那种在不同处理器平台<processor platforms >之上执行相同二进制代码<binary code>的能力。)互操作性的缺乏可能是在程序设计期间对于标准化(standardization)缺乏重视的一种后果。实际上,在计算机世界(computing world)的那些并未基于标准的部分当中,互操作性也的确并非理所当然的事情。

 
根据国际标准ISO/IEC 2382-01 信息技术词表,基础术语(ISO/IEC 2382-01, Information Technology Vocabulary, Fundamental Terms),互操作性定义如下:“在几乎或几乎无须用户了解各种功能单元的独特特性的情况下,这些功能单元之间进行通讯、执行程序或者传输数据的能力”。以上两段是维基百科对“互操作性”的解释,让我们对“嵌入互操作类型”有了个基本的概念。

 
那就接着讲什么叫“嵌入互操作类型”,下面是摘自msdn杂志上的一段。可能会给我们一些启迪和认识。



嵌入COM互操作类型


这更像是 C# 编译器功能,而不像是 C# 语言功能,但您现在可以使用 COM 互操作程序集,而不要求该程序集在运行时必须存在。目的是减轻将 COM 互操作程序集与您的应用程序一起部署的负担。


当 COM 互操作在最初版本的 .NET Framework 中引入时,就确立了主互操作程序集 (PIA) 的概念。引入此概念,是为了解决在组件之间共享 COM 对象的难题。for instance:如果您有一些不同的互操作程序集,分别定义了一个 Excel Worksheet,则我们无法在组件之间共享这些 Worksheet,因为它们具有不同的 .NET 类型。PIA 通过只存在一次而解决了这个难题:所有客户端都使用它,因此 .NET 类型始终是匹配的。

 
尽管 PIA 在理论上是个好主意,但在实际部署中却被证明是个大麻烦,因为它只有一份,而有多个应用程序可能会尝试安装或卸载它。而由于 PIA 通常很大,事情更复杂了。Office 在默认 Office 安装方式中并未部署它们,用户只需通过使用 TLBIMP 来创建自己的互操作程序集,即可轻松绕过这一个程序集系统。

 
因此,现在为了扭转这种局面,发生了两件事:


对于两个结构相同且共享相同识别特征(名称、GUID 等)的 COM 互操作类型,运行时能够聪明地将其看作同一个 .NET 类型。C# 编译器利用这一点的方式是在编译时直接在您自己的程序集中重现互操作类型,因此不再要求在运行时存在该互操作程序集。


由于篇幅所限,我不得不省略一些详细信息,但即使不了解这些信息,您也应该能够毫无障碍的使用这个功能,就像动态功能一样。您通过将引用上的“嵌入式互操作类型”属性设置为 true,告诉编译器为您将互操作类型嵌入到 Visual Studio 中。


由于 C# 团队希望这种方法成为引用 COM 程序集的首选方法,因此在默认情况下,Visual Studio 会将添加到 C# 项目中的任何新互操作引用的此属性设置为 True。如果您使用命令行编译器 (csc.exe) 来编译您的代码,请使用 /L 开关,而不是 /R 开关,来嵌入您必须引用的互操作程序集中的互操作类型。


  本文中介绍的所有功能本身都可以产生大量讨论,每一个主题都值得撰文论述。我省略了许多详细信息,也有许多详细信息只是一带而过。看到这里,我们大概有了清楚的认识,那就让我先做几点总结吧(不足之处欢迎补充)。


1.”嵌入互操作类型”中的嵌入就是引进、导入的意思,类似于c#中using,c中include的作用,目的是告诉编译器是否要把互操作类型引入。


2.“互操作类型”实际是指一系列Com组件的程序集,是公共运行库中库文件,类似于编译好的类,接口等。


3.“嵌入互操作类型”设定为true,实际上就是不引入互操作集(编译时候放弃Com程序集),仅编译用户代码的程序集。


而设定为false的话,实际就是需要从互操作程序集中获取 COM 类型的类型信息。

 

本文来源:



C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:VS2010,无法嵌入互操作类型"FastReport.TfrxReportClass"
下一篇:最近框架新加了功能,各版本及文档同步未完成
评论列表

发表评论

评论内容
昵称:
关联文章

VS2010出现无法嵌入操作类型
VS2010无法嵌入操作类型"FastReport.TfrxReportClass"
VS2019编译:无法嵌入操作类型 请改用适用的接口
VisualStudio VS2010 统计代码行数
关于使用VS2010新建了模块无法加载的问题
Visual Studio.NET 版本转换工具(支持VS2010VS2008、VS2005、VS2003及Express)
文件的类都不能进行设计,无法设计基类System.Object
VS设置App.config文件为嵌入的资源,360安全卫士报发现木马(解决方案)
C# object类型,c# object
引用DLL:出现不能设置下面的断点,公共语言运行时无法设置断点的错误
C#日期类型转换工具(时间戳,字符串,long,byte类型转)
VS运行ASP.NET网站应用程序:“/”应用程序的服务器错误。分析器错误,未能加载类型"XXX.Global"。
打开VS解决方案出现 Unknown Hard Error 错误
未能从程序集体加载类型:SecurityRulesAttribute
FastReport for.Net 1.6.18 VS2010安装及文件说明
FastReport for.Net 1.6.18 vs2010 简体中文破解版下载
MySql 时间戳Timestamp字段类型的字段作为主键模拟用户并发操作
VS2015源码管理器-GIT克隆与提交源码基本操作
将SQLServer数据类型转换为.NetSqlDbType类型
最新完整版:VS2017 GIT无法同步,GIT无法提交,存在未提交的修改,在重新合并前或者撤销更改

热门标签
.NET5 .NET6 .NET7 APP Auth-软件授权注册系统 Axios B/S B/S开发框架 Bug Bug记录 C#加密解密 C#源码 C/S CHATGPT CMS系统 CodeGenerator CSFramework.DB CSFramework.EF CSFrameworkV1学习版 CSFrameworkV2标准版 CSFrameworkV3高级版 CSFrameworkV4企业版 CSFrameworkV5旗舰版 CSFrameworkV6.0 DAL数据访问层 Database datalock DbFramework Demo教学 Demo下载 DevExpress教程 DOM EF框架 Element-UI EntityFramework ERP ES6 Excel FastReport GIT HR IDatabase IIS JavaScript LINQ MES MiniFramework MIS NavBarControl Node.JS NPM OMS ORM PaaS POS Promise API Redis SAP SEO SQL SQLConnector TMS系统 Token令牌 VS2022 VSCode VUE WCF WebApi WebApi NETCore WebApi框架 WEB开发框架 Windows服务 Winform 开发框架 Winform 开发平台 WinFramework Workflow工作流 Workflow流程引擎 版本区别 报表 踩坑日记 操作手册 代码生成器 迭代开发记录 基础资料窗体 架构设计 角色权限 开发sce 开发技巧 开发教程 开发框架 开发平台 开发指南 客户案例 快速搭站系统 快速开发平台 秘钥 密钥 权限设计 软件报价 软件测试报告 软件简介 软件开发框架 软件开发平台 软件开发文档 软件体系架构 软件下载 软著证书 三层架构 设计模式 生成代码 实用小技巧 收钱音箱 数据锁 数据同步 微信小程序 未解决问题 文档下载 喜鹊ERP 喜鹊软件 系统对接 详细设计说明书 行政区域数据库 需求分析 疑难杂症 蝇量级框架 蝇量框架 用户管理 用户开发手册 用户控件 在线支付 纸箱ERP 智能语音收款机 自定义窗体 自定义组件 自动升级程序