Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Visual Studio引用管理器-汇编框架与COM类型库_.net_Visual Studio_Reference - Fatal编程技术网

.net Visual Studio引用管理器-汇编框架与COM类型库

.net Visual Studio引用管理器-汇编框架与COM类型库,.net,visual-studio,reference,.net,Visual Studio,Reference,出于好奇,在Visual Studio的引用管理器中添加引用作为“汇编框架”与将其添加为“COM类型库”之间有什么区别?我意识到COM类型库并不适用于所有引用 例如:如果我想使用Microsoft Speech API,我可以将其用作“汇编框架”: 或者我可以将其用作“COM类型库”: 我不想用微软语音API实现任何东西。这只是一个例子来阐述我的问题 使用这两个选项之间有什么区别 他们指的是同一个图书馆吗?我在两个截图的右窗格中看到版本号不同 提前谢谢 使用这两个选项之间有什么区别 它们是完

出于好奇,在Visual Studio的
引用管理器中添加引用作为“汇编框架”与将其添加为“COM类型库”之间有什么区别?我意识到COM类型库并不适用于所有引用

例如:如果我想使用Microsoft Speech API,我可以将其用作“汇编框架”:

或者我可以将其用作“COM类型库”:

我不想用微软语音API实现任何东西。这只是一个例子来阐述我的问题

使用这两个选项之间有什么区别

他们指的是同一个图书馆吗?我在两个截图的右窗格中看到版本号不同

提前谢谢

使用这两个选项之间有什么区别

它们是完全不同的平台。COM已经存在很久了,在.NET开发之前,它被用来为Windows应用程序提供通用功能。它现在被认为是“遗产”,而且更难理解

这两个应用程序之间的差异对于本论坛来说太多了,但它们就像比较Android和iOS的应用程序一样——它们是供两个不同的客户端使用的。有些应用程序同时适用于这两种应用程序,但许多应用程序同时适用于这两种应用程序。有些库向这两种方法公开方法;有些人只是其中之一

如果从.NET应用程序引用库,则始终希望引用.NET程序集,除非在非常罕见的情况下(例如,COM库具有程序集不具有的不同功能)

他们指的是同一个图书馆吗


不直接-可能有一个或另一个的包装器在下面使用相同的代码,但在互操作级别,它们并不相同。

您得到了一个稍微有点考古的观点,这些是程序员在.NET可用之前使用的API。在本例中,SAPI是自1995年开始使用的语音API。它的COM包装器并不完全过时,在编写代码时,如使用C++或脚本语言(如JavaScript),您仍然使用它。 微软决定为它创建一个更以.NET为中心的包装器。公平地说,当您想要收听事件时,COM包装器并不能很好地工作。不仅仅是这个例子,其他好的例子还有System.Management(wraps WMI)、System.Messaging(wraps MQ)、System.Data.OleDb(wraps ADO)、System.DirectoryServices(wraps AD)

没有令人信服的理由支持COM包装器System.Speech,因为它做得很好,而且是完整的。总的来说,微软内部强烈要求隐藏COM,对其编程可能会相当不愉快,特别是如果它不是自动化子集的话。直接编写像WASAPI或DirectX这样的核心API几乎没有什么乐趣


最完整的包装工作可能是Univeral Windows(又名WinRT、又名Store apps、又名Modern UI、又名UWP),其核心是完全现代化和完全COM。隐藏得很好,“语言投射”是一个相当巧妙的技巧。否则,你可以直接获得JavaScript应用程序与C++组件直接对话的基本方法。错误报告如此糟糕的基本原因是:)

那么
引用管理器中列出的COM对象在工作站上的什么位置?我相信“组装框架”部分列出的项目来自GAC。在
Microsoft Speech API
示例中,COM类型库是否来自
%windir%\System32\Speech\Common\sapi.dll
?或者是从GAC获取引用管理器中的COM类型的另一种方式?COM库在系统中“注册”并且可以位于几乎任何位置。所有链接都存储在注册表中。没有一种简单的方法仅仅通过名称来确定COM库的物理位置;在注册表中搜索面包屑是不愉快的。