gpt4 book ai didi

.net - .net 4's new no pia feature [deploying PIA' s 的优势是什么]

转载 作者:行者123 更新时间:2023-12-03 18:14:03 26 4
gpt4 key购买 nike

它可能只是在这里遗漏了一些东西,但是,当我为 Excel 互操作编写一些代码时,事情就是这样。

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

  • 是否存在我必须部署/注册 PIA 的情况?或者我在这里有什么问题,因为在我看来将 PIA 嵌入到主程序集中似乎不是一个很棒的大功能?

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

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

    我在安装了 Office 2003 的 Win7 Dev 机器上构建了它(所以我引用了 2003 库)。有趣的是,没有嵌入式 PIA 的应用是 9KB (这 3 个 PIA 的总大小高达 1.32MB)。使用嵌入式 PIA 的 exe 是 13KB .

    其次, 嵌入式 PIA,该应用在装有 Office 的机器上运行 2007 年和 2010 年。没有 嵌入式 PIA,在 WinXP+Office2007 上,仅当 PIA 不在 exe 目录中时才会失败。

    所以我猜无论哪种方法,都有某种动态分辨率?然后为什么它在 exe 目录中没有 PIA 的 Win7 上工作,但在 WinXP 上却失败了(仅当 PIA 不在 exe 的目录中时),Win7 盒子是否在全局范围内部署了 PIA 的 prolly ?

    谢谢
    基甸

    最佳答案

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

    这个问题在 .NET 4.0 中通过称为“类型等效”的功能得到了解决。它特定于 COM 接口(interface)类型,当它们具有相同的 [Guid] 和相同的声明时,CLR 认为它们是兼容的,无论哪个程序集包含它们。然后通过“嵌入互操作类型”功能(与“无 pia”相同)利用这一点,编译器将互操作类型嵌入到程序集的元数据中。只有你实际使用的那些。

    因此,您不必再发布互操作库,也不需要 PIA。而且它要小得多,因为您只需为实际使用的类型付费。物超所值,强烈推荐。

    关于.net - .net 4's new no pia feature [deploying PIA' s 的优势是什么],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4410414/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com