首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Office 2007 PIA

Office 2007 PIA
EN

Stack Overflow用户
提问于 2011-08-08 23:43:08
回答 1查看 3.1K关注 0票数 4

我构建了一个应用程序,它使用COM Interop生成Excel。它在我的和我们用户的机器上运行得很好:Office2007,Windows XP SP2。现在我把它迁移到另一台机器Office2010,Windows764位,并使用VS2008的visual studio 2010,它仍然可以正常工作。当我在我的用户的机器上部署它时,我遇到了问题,他们使用的是相同的Windows 7 64位,但Office 2007。

因此,如果我在我的Win7 64位和Office2010计算机上安装Office2007PIA,更改visual studio项目中的引用,会解决问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-08 05:58:07

我知道这篇文章已经有一段时间了,但我想我还是要说两句话,以防有人偶然发现它。

一般的经验法则是在开发中使用PIA版本,该版本链接到您计划支持的最旧版本的Office。因此,如果您打算支持Office2007及更高版本,请在开发期间使用PIA版本12。

添加对Office的引用(通过VSTO线上下载2007PIA,或者从GAC下载v12 PIA,如果您之前已经安装了Office2007)。现在你可能会想“好吧,我在Visual Studio中引用了v12,现在应该可以在Office2007上工作了”。不对。由于你引用的是v12,但你安装了Office2010,在程序集绑定期间,你的机器会说“好吧,需要v12,但我们在GAC中安装了v14,由于PIA是向前兼容的,我们将使用它”。尽管您显式地告诉它使用v12,但在构建完成后,您的机器将使用v14。您可以通过FUSLOG确认这一点。当使用程序集绑定时,FUSLOG是一个很好的工具。注意:如果您在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)。如果您继续滚动,您将看到以“策略”开头的文件夹,然后是数字,然后是PIA的名称(例如Policy.12.0.Microsoft.Office.Interop.Excel)。这是执行绑定重定向的策略文件。打开该文件夹中的XML配置文件,您将看到类似以下内容:

代码语言:javascript
复制
<?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程序集重定向。如果您像下面这样注释掉代码:

代码语言:javascript
复制
<?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策略文件上执行此操作,您的开发计算机将停止重定向。

希望这能回答你的问题!

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

https://stackoverflow.com/questions/6984733

复制
相关文章

相似问题

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