Я использую два компьютера, на одном из которых установлен Office 2010, а на другом - Office 2016. Первый - мой основной ПК.
Допустим, я запустил проект на основном ПК.Если я добавлю ссылку на любой из следующих объектов:
Microsoft.Office.Interop.Word
(Microsoft Word 14.0 Библиотека объектов). Microsoft.Office.Interop.Excel
(Microsoft Excel 14.0 Библиотека объектов). Microsoft.Office.Interop.PowerPoint
(Microsoft PowerPoint 14.0 Библиотека объектов).
.. и затем откройте проект вна втором компьютере Visual Studio автоматически выберет подходящую версию для всех из них (например, «Microsoft XXXX 16.0 Object Library») , поскольку для свойства «Embed Interop Type» установлено значение true .
Пока все хорошо, но когда я добавляю ссылку на Microsoft.Office.Core
(библиотека объектов Microsoft Office 14.0), я не могу получить то же поведение, то есть когда я открываю проект на второмПК, я нахожу ссылку с той же версией (14.0), помеченную значком, указывающим, что ссылка отсутствует, и предупреждениями о том же (ссылка не может быть найдена).
Очевидно, что если я удалюссылку и замените ее на более новую версию (16.0), все работает нормально, кроме - конечно- , что я больше не смогу открыть решение на основном ПК.
Итак, мои вопросы:
- Почему он не выбирает подходящую версию для
Microsoft.Office.Core
, например, что происходит с Interop.Excel
, Interop.Word
и т. Д.? - Есть ли решение для этого, такЯ могу без проблем открыть проект между двумя компьютерами?
Обратите внимание:
Основное внимание не уделяется запуску приложенияконечным пользователем с различными версиями Office (об этом и много раз отвечали ).Я больше обеспокоен открытием решения / проекта на дополнительном компьютере development с другой установленной версией Office.
В случаеэто актуально, это приложение WinForms.
Обновление:
Я попытался скопировать MSO.Файл DLL в локальной папке 'lib', но всякий раз, когда я добавляю его в качестве ссылки, в качестве пути ссылки отображается "C:\Windows\assembly\GAC_MSIL\Office\14.0.0.0__71e9bce111e9429c\Office.dll"
.Затем, независимо от того, отключаю ли я / включаю свойство Embed Interop Types
, оно все равно не компилируется на вторичной машине разработки.
Хотя я не совсем уверен, что получу полностью Eugene's answer , это помогло мне дать идею добавить ссылки PIA на вкладку Assemblies, а не на вкладку COM, и для свойства Embed Interop Type
все еще установлено значение true. Кажется, что на самом деле это работает , но я не уверен, что если не использовать ссылки на COM, могут быть какие-то недостаткиНеужели?