.net4 的新 no pia 功能的优点是什么 [部署 PIA]

2023-12-11

我可能只是在这里遗漏了一些东西,但是,当我为 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(使用前将#替换为@)

.net4 的新 no pia 功能的优点是什么 [部署 PIA] 的相关文章

  • DotNET 应用程序中的 GDI 句柄

    我的纯 DotNET 库作为非托管桌面应用程序中的插件运行 我收到了稳定的 虽然低 崩溃报告流 这些报告似乎表明 GDI 句柄存在问题 错误消息中的字体等 恢复为系统字体 各种控件的显示崩溃 不久后发生大规模崩溃 我的窗体几乎没有控件 但我
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • 解决找不到程序集的问题 |文件未找到异常 |融合日志

    我正在尝试将我的解决方案包 wsp 部署到 SharePoint 2007 环境 WSP 包含一个功能 该功能加载功能接收器类以在运行时部署计时器作业 在部署此 WSP 时 我不断得到 特征 fb631f6c 2c46 4ab5 b7b3
  • 当我使用 Image.FromFile() 时 FileNotFound

    我在这种情况下使用 Image FromFile string 方法 using System using System Collections Generic using System ComponentModel using Syste
  • c#.NET 和 sprintf 语法

    这段代码如何翻译成 C 具体来说是如何sprintf用C 实现 string output The user s logged in string loggedIn is string loggedOut isn t if TheUser
  • 为什么dsofile.dll还需要Office安装?

    我使用 dsofile dll 组件编写了一小段代码 以便在将文件上传到 Web 服务器后修改文档属性 设置 guid 以将文件链接到数据库记录 我从这里获取了组件和说明 http support microsoft com kb 2243
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 如何拦截 Boo 中的方法调用?

    红宝石有method missing Python有getattr Boo 是否提供了一些可以用来拦截方法调用的东西 是的 布有IQuackFu http docs codehaus org pages viewpage action pa
  • Winforms 中的 WPF ElementHost 最大化时崩溃 (Windows)

    我正在尝试将新的 WPF 控件集成到现有的 WinForms 应用程序中 并使用 ElementHost Dock Fill 来托管以下 XAML UserControl NET 4 当我将 WinForm 设置为最大化时 我的整个操作系统
  • 网络驱动器在启动时不可用

    我有一个 C 应用程序 它在启动时加载 并将数据记录到网络驱动器 该驱动器安装为 X 当机器首次启动时 应用程序会抛出 X 不可用的错误 如果我重新启动应用程序 也会出现同样的错误 但是 如果我打开 Windows 资源管理器并双击浏览驱动
  • 为什么 C# 不支持类构造函数中的隐式泛型类型?

    如果编译器可以推断出泛型类型参数 C 并不要求您指定它 例如 List
  • 使一个对象只能被同一程序集中的另一个对象访问?

    每个业务对象都有一个包含 sql 调用的匹配对象 我想限制这些 sql 对象 使其只能由匹配的业务对象使用 如何才能实现这一目标 Update 格雷格提出了关于可测试性的观点 由于 SqlObjects 将包含非常特定于业务流程的 sql
  • 如何计算最低系统要求?

    对于我用 Visual C 编写的应用程序 Testing 不 真的 这就是全部
  • 什么时候值得使用 BindingSource?

    我想我非常了解 BindingSource 类的作用 即在数据源和 UI 控件之间提供一个间接层 它实现了 IBindingList 接口 因此还提供了对排序的支持 而且我已经经常使用它 没有太多问题 但我想知道我使用它的频率是否超过了应有
  • IEnumerable 与 IReadOnlyList

    选择有什么区别IEnumerable
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 如何使用QTcpSocket监听qt中的特定端口? [复制]

    这个问题在这里已经有答案了 我正在使用 QTcpSocket 在两个应用程序之间进行通信 一个是C 程序 另一个是用PHP编写的网页 目标是使用套接字将数据从我的网页发送到我的 C 程序 我不知道如何在特定端口 例如 12345 上打开连接
  • 为 Git 存储库自定义 CSH 提示

    当我在 Git 存储库中时 我希望有一个自定义 CSH 提示 如果我不在 git 存储库中 我希望提示符看起来像这样 host name gt 但是当我进入 Git 存储库时必须变成这样 host name GIT REPO ROOT DI
  • 禁用 Jackson 中的数字到字符串自动转换

    当我向 Spring Boot 后端发出 json 请求时 Jackson 会自动将数字转换为字符串 有办法防止这种情况吗 例如 JSON numberAsString 123 JAVA private String numberAsStr
  • scala 应用程序中找不到对象播放

    我正在使用Eclipse并创建一个新的Scala对象 想要使用play的json解析功能并导入此包 但出现错误object play无法找到 想知道如何在 Scala 对象中使用 play 库 这就是我导入的方式 import play a
  • 无法在node.js中使用mongoose查询mongoDB

    假设我的 mongoDB 中有一个集合 db co并且只有一个文档 id ObjectId 50d083e32cdcf7ce065b616c age 22 friends Tom location NY name lee skill jav
  • jQuery.validate 插件和 ajax 表单提交

    我一生都无法让它发挥作用 验证错误看起来很好 我没有收到语法错误 但什么也没有发生 表单只是提交到页面 我也无法获得成功或错误警报
  • 方法指针的 RTTI 信息

    是否可以获取有关某个设备的 RTTI 信息TMethod 我可以通过以下方式获取实例 Instance TObject Method Data 这样我就可以获得实例的RTTI类型 但是如何才能获得正确的TRttiMethod 我想检查使用方
  • 如何将Python中的sqlite3版本从3.7.17升级到> 3.8

    尝试启动新的 django 应用程序 但出现错误 django core exceptions ImproperlyConfigured 需要 SQLite 3 8 3 或更高版本 发现 3 7 17 我已经安装了 sqlite 3 27
  • 使用 group by 计算 R 中列中子字符串的出现次数

    我想计算每组列中字符串的出现次数 在这种情况下 字符串通常是字符列中的子字符串 我有一些数据 例如 ID String village 1 fd sec ht rm A 2 NA ht rm A 3 fd sec B 4 san ht rm
  • 根据重叠日期匹配数据框之间的值

    我目前正在处理以下数据结构 属性 df ID Begin A End A Interval Value 1 5 1990 03 01 2017 03 10 1990 03 01 UTC 2017 03 10 UTC Cat1 2 10 19
  • 使用 jpa 从 postgres 读取 byte[] 时,长度几乎增加了一倍

    我有一个 Image 类 它有一个 byte 来包含实际的图像数据 我可以在我的网络应用程序中上传和插入图像 当我尝试从 JPA 读取图像后显示图像时 我的 byte 的长度始终为 2x 1 或 2x 2 其中 x 是 postgres 9
  • 在tearDown()方法中获取Python的单元测试结果

    是否可以在tearDown 方法中获取测试结果 即是否所有断言都已通过 我正在运行 Selenium 脚本 并且我想从tearDown 内部做一些报告 但是我不知道这是否可能 截至 2022 年 3 月 此答案已更新以支持Python 版本
  • 错误域=AVFoundationErrorDomain代码=-11821“无法解码”

    当我尝试使用 AVFoundation 合并视频时 发现了一个奇怪的行为 我很确定我在某个地方犯了错误 但我太盲目了 看不到它 我的目标只是合并 4 个视频 稍后它们之间会有交叉淡入淡出过渡 每次我尝试导出视频时都会收到此错误 Error
  • 在 Matlab 中生成 4D 数组的类似 Meshgrid 的函数

    我想在 matlab 中实现一个 4 维数学函数 但是meshgrid函数最多适用于 3 个维度 对于更多维度是否有类似的功能 我不想使用 for 循环 是的 使用ndgrid ndgrid扩展用于超过 3 的维度 但您肯定可以将其用于 2
  • AngularJs 中的迭代 ng-repeat 仅 X 次

    我如何使用 ng repeat 之类的for在 JavaScript 中 example div Text div 我想用 ng repeat 迭代 4 次 但我该怎么做呢 Angular 带有一个 limitTo limit 过滤器 它支
  • 导入数据时遇到错误字符 (ASCII 0)

    我正在尝试导入一些数据并收到错误 遇到错误字符 ASCII 0 我尝试导入的文件位于http commondatastorage googleapis com snksales dimdistributor csv 无法理解如何解决这个问题
  • 在Python中组合嵌套的for循环

    假设我有一个以下形式的嵌套循环 for i in List1 for j in List2 DoSomething i j 是否可以按如下方式进行 for i j in combine List1 List2 DoSomething i j
  • Application.Quit() 在 Android 上不起作用

    我试图让应用程序在您按 Android 手机的后退 返回键时自行退出 我尝试将此代码放入附加到所有场景中存在的游戏对象的脚本的更新中 因为DontDestroyOnLoad if Input GetKeyDown KeyCode Escap
  • Tensorflow,恢复特定设备中的变量

    也许我的问题有点天真 但我确实在张量流文档中没有找到任何内容 我有一个训练有素的张量流模型 它的变量被放置在 GPU 中 现在我想恢复这个模型并使用CPU进行测试 如果我通过 tf train Saver restore 执行此操作 如示例
  • .net4 的新 no pia 功能的优点是什么 [部署 PIA]

    我可能只是在这里遗漏了一些东西 但是 当我为 Excel 互操作编写一些代码时 它是这样的 我添加了对 Excel Com 库的引用 VS 创建一个 PIA Microsoft Office Interop Excel 通过 tlbimp