gid*_*eon 4 .net com-interop .net-4.0 pia office-interop
它可能我只是在这里遗漏了一些东西但是,当我为Excel互操作编写一些代码时,它是如何进行的.
是否存在我必须部署/注册PIA的情况?或者我在这里遇到了什么问题,因为在我看来,将PIA嵌入主程序集似乎不是一个很大的功能?
请原谅我的无知,如果有的话.
更新:
所以我做了一些测试,我写了一个打开excel的应用程序在单元格中添加"hello"并保存文件.
我在安装了Office 2003的Win7 Dev机器上构建它(所以我引用了2003 libs).有趣的是,没有嵌入式PIA,该应用程序为9KB(3 PIA总计高达1.32MB).使用嵌入式PIA,exe为13KB.
其次,通过嵌入式PIA,该应用程序在Office 2007和2010上运行.在没有嵌入式PIA的情况下,在WinXP + Office2007上,只有当PIA不在exe目录中时它才会失败.
所以我想无论采用何种方法,都有某种动态分辨率?然后为什么它在没有PIA的exe7目录中的Win7上运行,但是在WinXP上它失败了(只有当PIA没有在exe的目录中时),Win7盒子是否在全球范围内部署了PIA?
谢谢
基甸
Han*_*ant 14
实际上需要PIA并不常见.如果您在其中一个公共类中公开Excel类型库中的任何互操作类型,则必须有一个.当其他代码使用您的类并且不使用相同的互操作库时,这会出错..NET中的类型只有在来自同一程序集时才相同.您将收到一条难以解释的错误消息,例如"无法将应用程序强制转换为应用程序".PIA确保每个人都使用相同的类型.只要每个人都使用相同的PIA版本,这本身就是一个难题.如果可以避免这种情况,可以将您自己的互操作DLL与您的应用程序一起部署.在大多数情况下,这并不困难.
这个问题在.NET 4.0中通过一个名为"类型等价"的功能得到了解决.它特定于COM接口类型,CLR认为它们具有相同的[Guid]和相同的声明时是兼容的,无论哪个程序集包含它们.然后利用'embed interop types'功能(与'no pia'相同),编译器将interop类型嵌入到程序集的元数据中.只有你实际使用的那些.
因此,您不必再运送互操作库,也不需要PIA.由于您只需支付实际使用的类型,因此它要小得多.强烈推荐,这是很大的收获.
我自己没有做太多的互操作,但我相信:
| 归档时间: |
|
| 查看次数: |
2268 次 |
| 最近记录: |