- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我构建了一个应用程序,它使用 COM Interop 生成 Excel。它在我和我们用户的计算机上运行良好:Office 2007、Windows XP SP2。现在我将其迁移到另一台机器上,Office 2010,Windows 7 64位,并使用VS2008中的Visual Studio 2010,仍然运行良好。当我将其部署到用户的计算机上时,我遇到了问题,他们使用相同的 Windows 7 64 位但使用 Office 2007。
因此,如果我在 Win7 64 位和 Office 2010 计算机上安装 Office 2007 PIA,更改 Visual Studio 项目中的引用,是否可以解决问题?
最佳答案
我知道这篇文章已经有一段时间了,但我想无论如何我都会投入两分钱,以防有人偶然发现它。
一般经验法则是在开发中使用与您计划支持的最旧 Office 版本链接的 PIA 版本。因此,如果您要支持 Office 2007 及更高版本,请在开发过程中使用 PIA 版本 12。
添加对 v12 PIA 的引用(通过 VSTO 在线下载 2007 PIA,或者如果您之前已经安装了 Office 2007,则从 GAC 下载)。现在您可能会想“好吧,我在 Visual Studio 中引用 v12,这现在应该可以在 Office 2007 上运行”。错误的。由于您引用的是 v12,但安装了 Office 2010,因此在程序集绑定(bind)期间,您的计算机会显示“好吧,请求 v12,但我们在 GAC 中安装了 v14,并且由于 PIA 向前兼容,我们将使用它”。即使您明确告诉它使用 v12,构建完成后您的机器将使用 v14。您可以通过FUSLOG确认这一点。 FUSLOG 是处理程序集绑定(bind)时使用的出色工具。 注意:如果您认为应该在 FUSLOG 中看到任何内容,请清除 Internet Explorer 历史记录中的所有内容,然后重试。
要解决此问题,您需要停止所谓的“assembly binding redirection” '。这些 PIA 通常在 GAC 中拥有一个策略文件。策略文件的目的是在解析程序集时将旧的 PIA 版本重定向到新版本。要查看此内容,请执行以下操作:
进入 GAC 后,向下滚动并查找您引用的 PIA 文件夹(例如 Microsoft.Office.Interop.Excel)。如果继续滚动,您应该会看到以“Policy”开头的文件夹,然后是数字,然后是 PIA 的名称(例如 Policy.12.0.Microsoft.Office.Interop.Excel)。这是执行绑定(bind)重定向的策略文件。打开该文件夹中的 XML 配置文件,您将看到类似于以下内容的内容:
<?xml version="1.0" encoding="UTF-16"?><configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity>
<bindingRedirect oldVersion="12.0.0.0" newVersion="14.0.0.0"></bindingRedirect>
</dependentAssembly>
</assemblyBinding>
</runtime>
在上面的代码片段中,标签“bindingRedirect oldVersion ...”负责PIA程序集重定向。如果您注释掉如下代码:
<?xml version="1.0" encoding="UTF-16"?><configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity>
<!--<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>-->
</dependentAssembly>
</assemblyBinding>
</runtime>
那么这个重定向将被忽略。我对其进行评论而不是删除,只是因为该文件确实有很好的用途,但在为旧版本的 Office 进行开发时则不然。对您需要的每个 PIA 策略文件执行此操作,您的开发计算机将停止重定向。
希望这能回答您的问题!
关于.net - Office 2007 PIA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984733/
它可能只是在这里遗漏了一些东西,但是,当我为 Excel 互操作编写一些代码时,事情就是这样。 我添加了对 Excel Com 库的引用。 VS 创建一个 PIA - Microsoft.Office
在 .NET 远程处理中使用 PIA 有什么好处?我在一次采访中被问到这个问题,我的回答是关于 COM 对象的,但有人坚持认为它在使用 .NET 远程处理时在连接方面有好处,我搜索了网络,但我找不到
我构建了一个应用程序,它使用 COM Interop 生成 Excel。它在我和我们用户的计算机上运行良好:Office 2007、Windows XP SP2。现在我将其迁移到另一台机器上,Offi
首先,我的问题与 Is Office 2007 PIA deployment possible without Office 2007? 我还没有打算使用 PIA。理想情况下,IT 工程师希望在升级
我目前正在调查 TFS 2012 自动构建/构建代理 我的情况是: 构建 Office 2007 插件的遗留解决方案 测试构建 Controller 两个测试构建代理,一个在 Windows 7 和
我正在使用 Office 2007 PIA 并尝试从 x 个用户选择的文档中生成一个大文档。大多数这些文档可能是 word 文档,但我们希望支持任何文件类型。 文本文档在使用 InsertFile.
我有一个 C# 程序,它做了一些 Word 和 Excel 自动化,它使用了 Office 2003 Primary Interop Assemblies。我部署它的方式是将 Interops 包含在
我已经成功完成了与 MS Word 集成的 Windows 窗体应用程序 - 该应用程序写入 Word 模板中的合并字段。我使用 MS Word 2007 制作了该模板,但以兼容模式将其保存为 97-
我正在使用 FSharp 的 Microsoft Office PIA。当我尝试像这样从 Microsoft Word 获取 SynonymInfo 时: #r "Office.dll" #r "Mi
我目前正在开发一个 C# 项目,需要访问 Outlook。开发是在两台不同的机器上完成的,其中一台安装了 Office,另一台没有安装。我previously询问如何针对 Outlook com 对象
我正在使用 FSharp 的 Microsoft Office PIA。当我尝试像这样从 Microsoft Word 获取 SynonymInfo 时: #r "Office.dll" #r "Mi
我正在使用 Office PIA 将应用程序集成到 Word 中。 有多个 word 文档,当您打开它们时会运行一个宏。我的目标是锁定当前文档,但在宏运行之后。有没有办法做到这一点?认为这样的事情应该
我无法访问 .Count 的 Sheets 属性。我正在使用 Excel 互操作。我处于 Debug模式,我正在尝试这个: ?xlSheets.Count 这导致: (1) : error BC304
我正在为 Office 2010 创建插件,需要在安装时检测是否安装了 Office 2010 PIA。 我已经在 2003 年和 2007 年这样做了,但是找不到 2010 年的组件 ID 有谁知道
我看到了一些关于 Office 2007 PIAs 的其他问题。 , 特别是: Can you install Office 2007 PIA's without office? (3) Is Off
编辑: 看起来 Jon Skeet 有一些类似的问题:How does the C# compiler detect COM types? 如何获取主互操作程序集中给定接口(interface)的 C
我目前正在尝试在使用 Microsoft.Office.Interop dll 的 TeamCity 上构建。由于我安装了 Office,这将在本地构建并正常工作,但是当尝试在 TeamCity 上构
Office 2007 PIA 是否也需要安装 Office 2007? 我可以使用 VSTO 3.0 部署 Office 2007 PIA(不安装 Office 2007)吗? 编辑:我有一个生成
我的开发机器上有 Office 2007。我正在为带有 Office 2003 的客户服务器构建一个小型应用程序,该应用程序需要进行一些互操作。我的程序将在夜间批处理中作为计划任务运行。 无论我做什么
我一直在使用 Office 2007 PIA 在我的 C# 应用程序中运行 PowerPoint 文件。 我知道这需要在机器上安装 Office 2007。 我想知道,可以用 OpenOffice.o
我是一名优秀的程序员,十分优秀!