gpt4 book ai didi

.net - Office 2007 PIA

转载 作者:行者123 更新时间:2023-12-02 09:31:57 27 4
gpt4 key购买 nike

我构建了一个应用程序,它使用 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 版本重定向到新版本。要查看此内容,请执行以下操作:

  1. “Windows 键 + R” 打开运行菜单。
  2. 输入“C:\Windows\Assembly\GAC”并按 Enter 键。注意:我运行的是 32 位机器。您的 PIA 很可能安装在 GAC 中的不同位置,例如“C:\Windows\Assembly\GAC_MSIL”。

进入 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/

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