我知道這個帖子有一段時間回來了,但我想我會拋出我的兩分錢,以防有人絆倒它。
拇指一般規則是發展,與最古老版本的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版本重定向到較新的版本。看到這一點,做到以下幾點:
- 按'Windows鍵+ R'打開運行菜單。
- 輸入'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策略文件上執行此操作,您的開發計算機將停止重定向。
希望這能回答你的問題!
來源
2012-01-07 21:58:06
Sam
問題? *什麼問題? –
如果您點擊每個辦公室裝配並打開「嵌入互操作類型」,該怎麼辦?我認爲這消除了需要關心PIA文件的位置或正在使用哪個版本的問題。 –