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

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

 

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。





    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7026602.html ,如需转载请自行联系原作者


相关文章
|
5月前
|
Linux 开发者 Windows
告别手动上传!开源FTP批量同步工具(免费跨平台)​​
自己开发的一个简单实用的 FTP 文件夹同步工具,支持定时自动同步和系统托盘运行,免去繁琐的配置。
130 0
|
存储 API C++
【Qt 信号槽】深入探索 Qt 信号和槽机制中的引用传递“ (“A Deep Dive into Reference Passing in Qt Signal and Slot Mechanism“)
【Qt 信号槽】深入探索 Qt 信号和槽机制中的引用传递“ (“A Deep Dive into Reference Passing in Qt Signal and Slot Mechanism“)
1246 0
|
网络协议 算法 Java
万字长文 | 保姆级的后台服务器开发C++学习路线
这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」
|
运维 网络安全 Docker
JumpServer——使用Docker快速搭建
JumpServer——使用Docker快速搭建
413 1
JumpServer——使用Docker快速搭建
|
C++
C++一分钟之-循环结构:for与while循环
【6月更文挑战第18天】在C++中,`for`循环适合已知迭代次数,如数组遍历;`while`循环适用于条件驱动的未知次数循环。`for`以其初始化、条件和递增三部分结构简洁处理重复任务,而`while`则在需要先检查条件时更为灵活。常见错误包括无限循环和逻辑错误,解决办法是确保条件更新和正确判断。了解两者应用场景及陷阱,能提升代码效率和可读性。
488 6
|
机器学习/深度学习 人工智能 安全
Gandalf AI 通关详解(大模型安全)
Gandalf AI 通关详解(大模型安全)
|
算法 Linux 编译器
【Linux 第三方库】 linux 交叉编译fontconfig,freetype,libxml2,uuid
【Linux 第三方库】 linux 交叉编译fontconfig,freetype,libxml2,uuid
706 0
OpenCV-绘制多边形(fillConvexPoly和fillPoly的区别)
OpenCV-绘制多边形(fillConvexPoly和fillPoly的区别)
483 1
|
存储 Java
探索Stream流的实际应用场景
在Java 8中,引入了Stream流这一强大的新特性,它不仅可以让我们更加优雅地处理集合数据,还可以提高代码的简洁性和性能。本文将深入探讨Stream流的实际应用场景,从而帮助读者更好地理解和应用这一功能。
905 0