是否嵌入互操作?
Embedding an Interop or Not?
我正在编写一个程序,该程序使用 WMPLib
参考作为项目的一部分。
我的问题是,我在 MSDN 文档中注意到以下内容:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd564585(v=vs.85).aspx
Distributing Your Application
When you distribute your application, be sure to install AxInterop.WMPLib.dll and Interop.WMPLib.dll in the application folder. You will also need to make sure that the required Windows Media Player version is installed on the user's computer.
当我编译我的项目时,我注意到在可执行文件夹中没有提及 WMPLib.dll 或 Interop.WMPLib.dll,即使它在我的代码中被正确引用。直到我将选项 "Embed Interop Type" 从 True 更改为 False。然后,当我编译程序时,我注意到文件“Interop.WMPLib.dll”与我刚刚编译的可执行文件一起在基本文件夹中可用。
仅在此实例中创建文件是正常行为吗?如果我打算将此应用程序分发到其他 Windows PC,我是否应该将 "Embed Interop Type" 保留为 false?此外,我是否应该对我的所有参考资料(如 Visual Basic PowerPack)执行此操作? I used to be able to connect to an Access DB 的 Windows 包怎么样,我需要在那里做什么吗?
这篇文章已经过时了,它是在 .NET 4.0 发布之前写的。第一个开始支持 "Embed Interop Types" 特性的版本(与 VS2010 一起)。您总是喜欢默认值 True。而不是将 COM 互操作类型存储在 xyz.Interop.dll 程序集中,它们现在被复制到使用它们的程序集中。只有您使用的实际类型。所以完全正常,你在构建目录中看不到它们,你不再需要它们了。
它实际上解决了一个更大的问题,将 PIA(初级互操作程序集)部署到一台机器上。首先与与 Office 互操作的程序相关。当您与 WMP 互操作时通常不会出现问题,因为您不会将您自己的程序集中的任何 WMP 类型公开给其他应用程序使用。如果你愿意那么你就没有问题:)
Visual Basic PowerPack 是一个普通的 .NET 程序集,而不是 COM 互操作程序集,因此不能以同样的方式对待。 "Access OLEDB"太模糊了,靠默认。
基础功能是 "type equivalence",这是一种结构性 CLR 改进,可以帮助将来自不同程序集的类型视为相同。如果您对 CLR 体系结构感兴趣,那么您想观看 this video.
我正在编写一个程序,该程序使用 WMPLib
参考作为项目的一部分。
我的问题是,我在 MSDN 文档中注意到以下内容:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd564585(v=vs.85).aspx Distributing Your Application
When you distribute your application, be sure to install AxInterop.WMPLib.dll and Interop.WMPLib.dll in the application folder. You will also need to make sure that the required Windows Media Player version is installed on the user's computer.
当我编译我的项目时,我注意到在可执行文件夹中没有提及 WMPLib.dll 或 Interop.WMPLib.dll,即使它在我的代码中被正确引用。直到我将选项 "Embed Interop Type" 从 True 更改为 False。然后,当我编译程序时,我注意到文件“Interop.WMPLib.dll”与我刚刚编译的可执行文件一起在基本文件夹中可用。
仅在此实例中创建文件是正常行为吗?如果我打算将此应用程序分发到其他 Windows PC,我是否应该将 "Embed Interop Type" 保留为 false?此外,我是否应该对我的所有参考资料(如 Visual Basic PowerPack)执行此操作? I used to be able to connect to an Access DB 的 Windows 包怎么样,我需要在那里做什么吗?
这篇文章已经过时了,它是在 .NET 4.0 发布之前写的。第一个开始支持 "Embed Interop Types" 特性的版本(与 VS2010 一起)。您总是喜欢默认值 True。而不是将 COM 互操作类型存储在 xyz.Interop.dll 程序集中,它们现在被复制到使用它们的程序集中。只有您使用的实际类型。所以完全正常,你在构建目录中看不到它们,你不再需要它们了。
它实际上解决了一个更大的问题,将 PIA(初级互操作程序集)部署到一台机器上。首先与与 Office 互操作的程序相关。当您与 WMP 互操作时通常不会出现问题,因为您不会将您自己的程序集中的任何 WMP 类型公开给其他应用程序使用。如果你愿意那么你就没有问题:)
Visual Basic PowerPack 是一个普通的 .NET 程序集,而不是 COM 互操作程序集,因此不能以同样的方式对待。 "Access OLEDB"太模糊了,靠默认。
基础功能是 "type equivalence",这是一种结构性 CLR 改进,可以帮助将来自不同程序集的类型视为相同。如果您对 CLR 体系结构感兴趣,那么您想观看 this video.