是否嵌入了Interop?

时间:2016-01-29 20:16:46

标签: .net vb.net dll interop

我正在编写一个使用WMPLib参考作为项目一部分的程序。

我的问题是,我在MSDN文档中注意到以下内容:

  

https://msdn.microsoft.com/en-us/library/windows/desktop/dd564585(v=vs.85).aspx   分发您的申请

     

分发应用程序时,请确保在应用程序文件夹中安装AxInterop.WMPLib.dll和Interop.WMPLib.dll。您还需要确保在用户的计算机上安装了所需的Windows Media Player版本。

当我编译项目时,我注意到在可执行文件夹中没有提到WMPLib.dll或Interop.WMPLib.dll,即使它在我的代码中被正确引用。直到我更改了选项" Embed Interop Type"从真到假。然后当我编译程序时,我注意到文件`Interop.WMPLib.dll"然后在基本文件夹中提供我刚刚编译的可执行文件。

enter image description here

这个文件的正常行为是否仅在此实例中创建?如果我计划将此应用程序分发给其他Windows PC,我应该保留"嵌入互操作类型"是假的?另外我应该对我的所有引用如Visual Basic PowerPack执行此操作吗?那个I used to be able to connect to an Access DB的Windows Pack怎么样?我需要做些什么吗?

1 个答案:

答案 0 :(得分:2)

这篇文章已经过时,它是在.NET 4.0发布之前编写的。第一个版本(以及VS2010)开始支持"嵌入互操作类型"特征。你总是喜欢默认的True。它们现在被复制到使用它们的程序集中,而不是将COM互操作类型存储在xyz.Interop.dll程序集中。只有您使用的实际类型。如此完全正常,你不会在构建目录中看到它们,你不再需要它们了。

它实际上解决了一个更大的问题,将PIA(主互操作程序集)部署到一台机器上。最重要的是与Office互操作的程序。当您与WMP交互时,通常不会出现问题,因为您不会从您自己的程序集中公开任何WMP类型以供其他应用程序使用。如果你愿意,那么你没有问题:)

Visual Basic PowerPack是一个普通的.NET程序集,而不是COM互操作程序集,因此无法以相同的方式处理。 "访问OLEDB"太模糊了,依靠默认。

底层特征是"类型等价",一种结构性CLR改进,可以帮助不同程序集中的类型被认为是相同的。如果CLR架构让您感兴趣,那么您想要观看this video