首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET 4新的无pia特性(部署PIA的)的优点是什么?

.NET 4新的无pia特性(部署PIA的)的优点是什么?
EN

Stack Overflow用户
提问于 2010-12-10 15:33:06
回答 3查看 2.4K关注 0票数 4

它可能只是遗漏了一些东西,但是,当我为Excel互操作编写一些代码时,它是如何进行的。

  • I添加了对Excel库的引用。
  • VS创建了一个PIA -Microsoft.Office.Interop.Excel.(通过tlbimp对吗?)。
  • 我将exe和interop(PIA) dll复制到任何计算机(与.net一起),它可以工作吗?

是否有需要部署/注册PIA的场景?或者我在这里做错了什么,因为在我看来,将PIA嵌入到主程序集中似乎不是一个很大的特性吗?

请原谅我的无知,如果有的话。

更新:

所以我做了一些测试,我编写了一个应用程序,打开excel,在一个单元格中添加"hello“并保存文件。

我在安装了Office2003的Win7开发机器上构建了它(所以我引用了2003年的libs)。有趣的是,没有嵌入式PIA的应用程序是9KB (3 PIA的总容量高达1.32MB)。使用嵌入式PIA的exe是13‘s

其次,带有 embedded PIA,该应用程序在一台带有Office 2007和2010的机器上工作。在WinXP+Office2007上,没有嵌入式PIA,只有当WinXP+Office2007不在exe目录时才会失败。

所以我想无论用什么方法,都有某种动态分辨率?然后为什么它在没有Win7的情况下在exe目录中工作,但是在WinXP上却失败了(只有当PIA不在exe的dir中时),Win7框是否在全球范围内部署了PIA?

谢谢

吉迪恩

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-10 17:03:12

实际上需要一个PIA并不是很常见。如果在一个公共类中公开Excel类型库中的任何互操作类型,则必须有一个。当其他代码使用您的类而不使用相同的互操作库时,这会出错。.NET中的类型只有来自同一个程序集时才是相同的。您将很难解释错误消息,比如“无法将应用程序转换为应用程序”。PIA确保每个人都使用相同的类型。只要每个人都使用相同的PIA版本,这本身就是一个难题。如果你能避免这种情况的话,把你自己的互操作DLL和你的应用一起部署是可以的。在大多数情况下,这并不困难。

这个问题在.NET 4.0中通过一个名为“类型等价”的特性得到了解决。它是特定于COM接口类型的,当它们具有相同的Guid和相同的声明时,CLR认为它们是兼容的,而不管哪个程序集包含它们。然后,利用‘embeds types’特性(与'no pia‘相同),编译器将互操作类型嵌入到程序集的元数据中。只有你实际使用的那些。

所以你不必再发布互操作库了,也不需要PIA了。而且它要小得多,因为你只为你实际使用的类型付费。强烈推荐,这是一笔不菲的钱。

票数 14
EN

Stack Overflow用户

发布于 2010-12-10 15:38:40

我自己并没有做什么,但我相信:

  • 有时PIA可能相当大;如果应用本身很小,则PIA可以使其
  • 相形见绌--在版本控制方面,非PIA方法更灵活:只要您只使用COM对象的实际提供版本所提供的成员,就可以.而我认为,使用PIA方法,您需要将PIA用于COM对象的相同版本,与目标计算机上的

上的版本相同。

票数 5
EN

Stack Overflow用户

发布于 2010-12-10 16:04:21

了解NoPIA的关键之一是它没有将PIA嵌入到您的程序集中,而是只嵌入应用程序使用的PIA部分。它以非常细粒度的方式(一直到方法级别)这样做。其结果通常是大大减少了应用程序的部署规模。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4410414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档