我可能只是在这里遗漏了一些东西,但是,当我为 Excel 互操作编写一些代码时,它是这样的。
- 我添加了对 Excel Com 库的引用。
- VS 创建一个 PIA - Microsoft.Office.Interop.Excel...(通过 tlbimp 对吧?)。
- 我将 exe 和 interop(PIA) dll 复制到任何计算机(带有 .net)并且它可以工作吗?
是否存在我必须部署/注册 PIA 的情况?或者我在这里出了什么问题,因为在我看来,将 PIA 嵌入到主组件中似乎并不是一个伟大的功能?
如果有的话请原谅我的无知。
Update:
所以我做了一些测试,我编写了一个应用程序,打开 Excel 在单元格中添加“hello”并保存文件。
我在安装了 Office 2003 的 Win7 Dev 机器上构建了它(所以我引用了 2003 库)。有趣的是,如果没有嵌入式 PIA,该应用程序是9KB(3个PIA总计达1.32MB)。对于嵌入式 PIA,exe 是13KB.
第二,with嵌入式 PIA,该应用程序在装有 Office 的计算机上运行2007 年和 2010 年。 And without嵌入式PIA,在WinXP+Office2007上,仅当PIA不在exe目录中时才会失败。
所以我想无论什么方法,都有某种动态分辨率?那么为什么它在exe目录中没有PIA的Win7上可以工作,但在WinXP上却失败(仅当PIA不在exe目录中时),Win7盒子是否有全局部署的PIA?
Thanks
Gideon
真正需要 PIA 的情况并不常见。如果您在公共类之一中公开 Excel 类型库中的任何互操作类型,则必须拥有一个。当其他代码使用您的类并且不使用相同的互操作库时,就会出现问题。 .NET 中的类型只有来自同一程序集时才是相同的。您会收到一条难以解释的错误消息,例如“无法将应用程序转换为应用程序”。 PIA 确保每个人都使用相同的类型。只要大家都使用相同的PIA版本,这本身就是一个难题。如果可以避免这种情况,那么将您自己的互操作 DLL 与您的应用程序一起部署就可以了。在大多数情况下这并不困难。
这个问题在 .NET 4.0 中通过称为“类型等效”的功能得到了解决。它特定于 COM 接口类型,当它们具有相同的 [Guid] 和相同的声明时,CLR 认为它们是兼容的,无论哪个程序集包含它们。然后利用“嵌入互操作类型”功能(与“无 pia”相同),编译器将互操作类型嵌入到程序集的元数据中。只有您实际使用的。
因此,您不必再提供互操作库,也不需要 PIA。而且它要小得多,因为您只需为实际使用的类型付费。那是一个lot物超所值,强烈推荐。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)