Office 2007 PIA - PullRequest
       5

Office 2007 PIA

4 голосов
/ 08 августа 2011

Я создал приложение, оно генерирует Excel с COM Interop.Он отлично работает на моем компьютере и на компьютере пользователя: Office 2007, Windows XP SP2.Теперь я перевожу его на другую машину, Office 2010, 64-разрядную версию Windows 7, и использую Visual Studio 2010 из VS2008, которая по-прежнему работает нормально.Когда я развернул его на компьютере моего пользователя, у меня возникла проблема: они используют ту же 64-разрядную версию Windows 7, но Office 2007.

Так что, если я установлю Office 2007 PIA на 64-разрядную версию Win7 и Office 2010, изменимссылка в моем проекте Visual Studio, это решит проблему?

1 Ответ

10 голосов
/ 08 января 2012

Я знаю, что это сообщение было некоторое время назад, но я решила, что в любом случае добавлю свои два цента, если кто-то наткнется на него.

Общее практическое правило - использовать версию 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 в более новые версии при разрешении сборки. Чтобы увидеть это, сделайте следующее:

  1. Нажмите 'Windows key + R' , чтобы открыть меню запуска.
  2. Введите ' 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, и ваша машина разработки прекратит перенаправление.

Надеюсь, это ответит на ваш вопрос!

...