【问题标题】:Embedding an Interop or Not?是否嵌入互操作?
【发布时间】:2016-05-07 16:56:01
【问题描述】:

我正在编写一个程序,它使用 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,即使它在我的代码中被正确引用。直到我将“嵌入互操作类型”选项从 True 更改为 False。然后,当我编译程序时,我注意到文件“Interop.WMPLib.dll”与我刚刚编译的可执行文件一起在基本文件夹中可用。

这是仅在此实例中创建文件的正常行为吗?如果我打算将此应用程序分发到其他 Windows PC,我是否应该将“嵌入互操作类型”保留为 false?此外,我应该对我的所有参考资料(如 Visual Basic PowerPack)执行此操作吗? I used to be able to connect to an Access DB 的 Windows Pack 呢,我需要在那里做些什么吗?

【问题讨论】:

    标签: .net vb.net dll interop


    【解决方案1】:

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

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

    Visual Basic PowerPack 是一个普通的 .NET 程序集,而不是 COM 互操作程序集,因此不能以同样的方式处理。 “访问OLEDB”太模糊了,依赖默认吧。

    基本功能是“类型等效”,这是一种结构 CLR 改进,可以帮助将来自不同程序集的类型视为相同。如果您对 CLR 架构感兴趣,那么您想观看this video

    【讨论】:

    • 向 OLEDB 提供附加信息:为了让我的 VB.NET 应用程序从 AccessDB 中读取。我的问题是问我是否需要对没有相同包的 PC 的应用程序做任何事情
    • 具体来说,我对这个答案中链接的可再发行组件有什么特别的要求:stackoverflow.com/a/27259078/692250。我想说不,但我不确定。
    • System.Data.OleDb 命名空间内置在框架中,Access 的 ADO 数据提供程序预安装在操作系统上。也许你正在使用 ACE,不知道。只需单击按钮即可更好地记录您的问题,尽管它肯定已经在某处得到解答。
    • 是的,我认为如果我提交多个“半相关”问题,那将是垃圾邮件。
    • 是的,它是完整的 PITA。
    猜你喜欢
    • 2012-02-27
    • 2017-10-12
    • 2011-01-29
    • 2019-02-02
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多