2011-08-08 294 views
5

我構建了一個應用程序,它使用COM Interop生成Excel。它可以在我的用戶機器上正常工作:Office 2007,Windows XP SP2。現在我將它遷移到另一臺機器,Office 2010,Windows 7 64位,並使用VS2008中的visual studio 2010,該工作仍然正常。當我將它部署在用戶機器上時,我遇到了問題,他們使用的是相同的Windows 7 64位,但Office 2007.Office 2007 PIA

因此,如果我在我的Win7 64位和Office 2010機器上安裝Office 2007 PIA,在我的視覺工作室項目中,能解決問題嗎?

+3

問題? *什麼問題? –

+0

如果您點擊每個辦公室裝配並打開「嵌入互操作類型」,該怎麼辦?我認爲這消除了需要關心PIA文件的位置或正在使用哪個版本的問題。 –

回答

9

我知道這個帖子有一段時間回來了,但我想我會拋出我的兩分錢,以防有人絆倒它。

拇指一般規則是發展,與最古老版本的Office的計劃,以支持連接最多使用PIA版本。因此,如果您打算支持Office 2007或更高版本,請在開發期間使用版本12的PIA。

添加對v12 PIA的引用(通過在線下載2007 PIA,通過VSTO下載,或者如果您之前已經有Office 2007,則從GAC下載)。現在你可能會想:「好的,我在Visual Studio中引用了v12,現在它應該可以在Office 2007上運行」。錯誤。由於您引用的是v12,但您已安裝Office 2010,因此在裝配綁定期間,您的計算機會說:「嗯,請求v12,但我們已將v14安裝在GAC中,並且由於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配置文件,你會看到類似下面的內容:

<?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策略文件上執行此操作,您的開發計算機將停止重定向。

希望這能回答你的問題!

+1

這是一個重要的信息!我在部署應用程序時遇到了很多麻煩,因爲我沒有意識到問題的根源。 Visual Studio總是在參考名稱中顯示原始版本11,儘管構建已重定向,如上所述,並且位於https://msdn.microsoft.com/zh-cn/library/2fc472t2%28v=vs.100%29.aspx。 – DrMarbuse

相關問題