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 类型的类型信息。

不知道大家明白了没有,我是有点明白了。。。

时间: 2024-12-24 21:55:10

VS2010中出现无法嵌入互操作类型的相关文章

VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法

原文:VS2010中,无法嵌入互操作类型"--",请改用适用的接口的解决方法 1.提示:在VS2010,在引用COM组件的时候,出现了无法嵌入互操作类型"--",请改用适用的接口的错误提示. 2.解决方案: 选中项目中引入的dll,鼠标右键,选择属性,把"嵌入互操作类型"设置为False. 例如: MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass(); 提示无法嵌入互操作类型MSXML2.XMLH

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

针对word或excel操作时,出现VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法 问了度娘,解决方法如出一辙:选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False.问题轻松解决后,应该有很多人纠结这个“嵌入互操作类型”到底是个什么意思呢? 您通过将引用上的“嵌入式互操作类型”属性设置为 true,告诉编译器为您将互操作类型嵌入到 Visual Studio 中. 总结: 1.”嵌入互操作类型”中的嵌入就是引进.导入的意思,类似于c#中usin

在vs中出现无法嵌入互操作类型“……”,请改用适用的接口的解决方法

1.在生成项目时提示所引用COM组件 出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示. 2.解决方案: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False. 在vs中出现无法嵌入互操作类型"--",请改用适用的接口的解决方法

VS2010,VS2012,VS2013中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法

在VS2013开发环境下,C#引用COM组件遇到的两个问题: 一开始是COM组件没有注册导致代码引用报错,那么我就使用管理员的命令行方式下,入册COM组件: C:\WINDOWS\system32>regsvr32 E:\CjnDesEncrypt.dll ,执行完该命令,代码引用不报错了,但是生成过程中又报如下错误: 在引用COM组件的时候,出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示. 查阅资料,找到解决方案,记录如下: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互

Visual Studio中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法

解决方案:选中项目中引入的dll,鼠标右键,选择属性,把"嵌入互操作类型"设置为False,问题轻松解决. 问题分析: 1."嵌入互操作类型"中的嵌入就是引进.导入的意思,类似于c#中using,c中include的作用,目的是告诉编译器是否要把互操作类型引入. 2."互操作类型"实际是指一系列Com组件的程序集,是公共运行库中库文件,类似于编译好的类,接口等. 3."嵌入互操作类型"设定为true,实际上就是不引入互操作集(

VS2013中, 无法嵌入互操作类型“……”,请改用适用的接口的解决方法

使用VS2013,在引用COM组件的时候,出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示. 查阅资料,找到解决方案,记录如下: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False.

[开发笔记]-“在引用COM组件时,出现了无法嵌入互操作类型。。。”的错误

这两天在做一个需要将wps文档转换成word文档的程序,在调用wps的com组件时项目编译是没有问题的,但当运行的时候却弹出了下面的错误提示: 从网上百度一番后,找到了正确的解决方法. 先从Com组件中添加引用: 选中引入的Com组件库,右键-> 属性: 将“嵌入互操作类型”改为 False 选项: 重新编译,程序正常运行. 由此,让我联想到了在前不久一个朋友在使用Office组件用来转换pdf文档时,出现的 “无法嵌入互操作类型...”的问题,记得当时他的处理方法是按照网上说的教程,设置程序获

“在引用COM组件时,出现了无法嵌入互操作类型。。。”的错误

这两天在做一个需要将wps文档转换成word文档的程序,在调用wps的com组件时项目编译是没有问题的,但当运行的时候却弹出了下面的错误提示: 从网上百度一番后,找到了正确的解决方法. 先从Com组件中添加引用: 选中引入的Com组件库,右键-> 属性: 将“嵌入互操作类型”改为 False 选项: 重新编译,程序正常运行. 由此,让我联想到了在前不久一个朋友在使用Office组件用来转换pdf文档时,出现的 “无法嵌入互操作类型...”的问题,记得当时他的处理方法是按照网上说的教程,设置程序获

vs2010 office组件dll右键属性找不到”嵌入互操作类型“问题的解决

近期项目碰到个奇怪的问题.在项目中添加excel的引用,然后右键该引用,选择属性,竟然找不到”嵌入互操作类型“,因引用office组件时,需要将其”嵌入互操作类型“设为false,否则编译不通过.后来经过百度,才找到问题的解决方法. 问题: 解决方法1: 修改项目的目标框架为.net framework 4及以上. 解决方法2: 如果项目的目标框架必须为.net framework2.0,那可以在项目文件.csproj中修改. 用txt打开该项目文件, 这样便大工告成. 小菜一碟 2014-10