Я знаю, что это сообщение было некоторое время назад, но я решила, что в любом случае добавлю свои два цента, если кто-то наткнется на него.
Общее практическое правило - использовать версию PIA в development , которая связана с самой старой версией Office, которую вы планируете поддерживать. Поэтому, если вы собираетесь поддерживать Office 2007 и более поздние версии, используйте PIA версии 12 во время разработки.
Добавьте ссылку на PIA v12 (либо загрузив PIA 2007 года онлайн, через VSTO, либо из GAC, если ранее у вас уже был Office 2007). Теперь вы можете подумать: «Хорошо, я ссылаюсь на v12 в Visual Studio, теперь это должно работать в Office 2007». Неправильно. Поскольку вы ссылаетесь на v12, но у вас установлен Office 2010, во время привязки сборки ваша машина скажет: «Хорошо, v12 запрошен, но у нас установлен v14 в GAC, и поскольку PIA совместимы с прямой связью, мы будем использовать это». Даже если вы явно указали ему использовать v12, после завершения сборки ваша машина будет использовать v14. Вы можете подтвердить это с помощью FUSLOG . FUSLOG - превосходный инструмент для работы с привязкой сборки. Примечание. Если вы ничего не видите в FUSLOG и считаете, что должны это сделать, удалите все данные из истории Internet Explorer и повторите попытку.
Чтобы решить эту проблему, вам нужно остановить то, что называется « перенаправление привязки сборки ». Эти PIA обычно имеют файл политики с ними в GAC. Цель файла политики - перенаправить старые версии PIA в более новые версии при разрешении сборки. Чтобы увидеть это, сделайте следующее:
- Нажмите 'Windows key + R' , чтобы открыть меню запуска.
- Введите ' 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). Это файл политики, который выполняет перенаправление привязки. Откройте файл конфигурации 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, и ваша машина разработки прекратит перенаправление.
Надеюсь, это ответит на ваш вопрос!