我构建了一个应用程序,它使用COM Interop生成Excel。它在我的和我们用户的机器上运行得很好:Office2007,Windows XP SP2。现在我把它迁移到另一台机器Office2010,Windows764位,并使用VS2008的visual studio 2010,它仍然可以正常工作。当我在我的用户的机器上部署它时,我遇到了问题,他们使用的是相同的Windows 7 64位,但Office 2007。
因此,如果我在我的Win7 64位和Office2010计算机上安装Office2007PIA,更改visual studio项目中的引用,会解决问题吗?
发布于 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版本重定向到较新的版本。要查看此信息,请执行以下操作:
在GAC中,向下滚动并查找您引用的PIA文件夹(例如Microsoft.Office.Interop.Excel)。如果您继续滚动,您将看到以“策略”开头的文件夹,然后是数字,然后是PIA的名称(例如Policy.12.0.Microsoft.Office.Interop.Excel)。这是执行绑定重定向的策略文件。打开该文件夹中的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策略文件上执行此操作,您的开发计算机将停止重定向。
希望这能回答你的问题!
https://stackoverflow.com/questions/6984733
复制相似问题