Различные ссылки Interop на двух разных компьютерах не работают

Когда я добавляю ссылку на Microsoft.Office.Interop.Excel на моем компьютере, Visual Studio добавляет это в файл проекта:

<COMReference Include="Excel">
  <Guid>{00020813-0000-0000-C000-000000000046}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>5</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

В команде есть еще один разработчик, который получает ошибки и должен добавить DLL файл в проект Interop.Excel.dll, который заменяет приведенный выше код этим файлом проекта:

<Reference Include="Interop.Excel, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>My Project\Interop.Excel.dll</HintPath>
</Reference>

Это работает на моем компьютере.

Не могли бы вы объяснить различия между этими двумя методами, что лучше, и как получить первую работу на других компьютерах?

Ответ 1

Я тоже не вижу проблемы с вашим подходом.

Обычно VS будет автоматически создавать сборку соединений для компонентов COM при добавлении ссылки на компонент. Однако, когда вы добавляете ссылку на один из компонентов Office (XP или любую более позднюю версию), ссылка на предварительно созданную (и оптимизированную) сборку первичного взаимодействия из Microsoft добавляется, как в вашем первом примере. Строка

<WrapperTool>primary</WrapperTool>

означает, что этот PIA используется.

Если вы правильно добавили ссылку PIA, свойство CopyLocal для этой ссылки должно быть установлено в false, а свойство Path должно быть чем-то вроде

C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Excel\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll

Вы найдете более подробную информацию об сборках соединений в этой статье MSDN .

Чтобы получить первый метод работы, необходимо, чтобы на нем были установлены первичные сборщики Office (PIA). Доступна распространяемая версия Microsoft:

AFAIK, эти PIA только устанавливаются установкой Office, когда .NET Framework уже установлена, поэтому для PIA существует отдельный распространяемый файл.

Примечание. Убедитесь, что вы ссылаетесь на версию Office, на которую настроен таргетинг. При ориентации на несколько версий Office вы можете столкнуться с некоторыми проблемами. Решение в этом случае может быть связано с поздним связыванием (если производительность не является проблемой).

Ответ 2

Я использовал способ автоматизации Excel больше, чем хотелось бы, и я никогда не ссылался на Interop.Excel.dll. Я всегда ссылался на первое. Почему он ссылается на это и какие ошибки он получает?

Вы, ребята, ссылаетесь на ту же версию excel (5.0 verses 11.0)? Вы, ребята, имеете ту же самую версию офиса, службы pakcs и все? Это может быть различие.

Ответ 3

Я нашел самый чистый способ его использования, это также позволяет использовать несколько версий взаимодействия, заключается в создании совместно используемого bin\Office Interop\11 или 12\Microsoft.Office.Interop.Excel.dll\и реферирования их из проект, работает для разных версий