Метод добавления ссылки на COM-взаимодействие Office в Visual Studio заключается в следующем:
- Ссылки
- Добавить ссылку
- Выберите вкладку COM
- Выбрать Библиотека объектов Microsoft Office 11.0
И появляется волшебно названная ссылка:
Microsoft.Office.Core
В файле Project.csproj
отображаются подробные данные ссылки:
<COMReference Include="Microsoft.Office.Core">
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>3</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
И проект проверен в системе контроля версий, и все хорошо.
Затем разработчик с Office 2007 получает проект из системы контроля версий и не может его построить, поскольку такой ссылки не существует.
Он (то есть я) проверяет файл .csproj, удаляет ссылку на
Microsoft Office 11.0 Object Library
и повторно добавляет ссылку на COM как
Microsoft Office 12.0 Object Library
И волшебным образом появляется именованная ссылка:
Microsoft.Office.Core
В файле Project.csproj
указаны подробности ссылки:
<COMReference Include="Microsoft.Office.Core">
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>4</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
И проект проверен в системе контроля версий и все хорошо.
Затем разработчик с Office 2003 получает проект из системы контроля версий и не может его построить, поскольку такой ссылки не существует.
Он (т.е. не я) проверяет файл .csproj, удаляет ссылку на
Microsoft Office 12.0 Object Library
и повторно добавляет ссылку на COM как
Microsoft Office 11.0 Object Library
И волшебным образом появляется именованная ссылка:
Microsoft.Office.Core
Файл Project.csproj
содержит подробные данные ссылки:
<COMReference Include="Microsoft.Office.Core">
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>3</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
И проект проверен в системе контроля версий, и все хорошо.
Затем проект создается, помещается на компакт-диски и отправляется клиентам, у которых Office 2007 .
.
И не все хорошо.
В прежние времена (т. Е. До ада .NET dll) мы ссылались на объекты Office, используя независимый от версии ProgID , т. Е.
"Excel.Application"
, который разрешает clsid установленного Office, например,
{00024500-0000-0000-C000-000000000046}
, из которых затем создается класс с использованием вызова COM (языково-нетурный псевдокод):
public IUnknown CreateOleObject(string className)
{
IUnknown unk;
Clsid classID = ProgIDToClassID(className);
CoCreateInstance(classID, null,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
IUnknown, out unk);
return unk;
}
Вопросы
1) Какова утвержденная методика автоматизации установленных приложений Office?
2) Для чего нужны Основные сборки взаимодействия Office 2003 ?
3) Если я использую основные сборки взаимодействия с Office 2003, нужно ли мне устанавливать Office 2003?
4) Если я собираюсь с использованием основных сборок взаимодействия Office 2003, мои клиенты навсегда привязаны к Office 20003?
5) Есть ли Office 2007 Первичные сборки взаимодействия ?
6) Если я устанавливаю основные сборки взаимодействия Office 2007, нужно ли мне устанавливать Office 2007?
7) Что плохого в использовании стандартного COM-взаимодействия для управления Excel, Word или Outlook? e.g.:
[ComImport]
[Guid("00024500-0000-0000-C000-000000000046")]
public class Excel
{
}
8) Что можно достичь, если добавить
- Ссылка на элементы на вкладке COM ,
- в отличие от использования [ComImport],
- в отличие от использования основных сборок взаимодействия Office 2007 ?
9) Добавление ссылки с использованием вкладки COM идентично использованию COM-взаимодействия , за исключением того, что для ее просмотра необходима библиотека типов ?
10) Совместимы ли основные сборки взаимодействия Office 2003 с обратной и прямой совместимостью с:
- Офис 14
- Офис 2007
- Office 2003
- Office XP
- Офис 2000
- Офис 97
- офис 95
Если заказчик и разработчик установят новую версию Office, она все еще будет работать?
11) Нужно ли нам отправлять основные сборки взаимодействия Office 2003 с нашим приложением?
12) Должен ли клиент устанавливать основные сборки взаимодействия Office 2003, прежде чем они смогут использовать наше приложение?
13) Если клиент устанавливает основные сборки взаимодействия Office 2003, должен ли он иметь Office установленным?
14) Если клиент устанавливает основные сборки взаимодействия Office 2003, должен ли он иметь установленный Office 2003 ?
15) Является ли основная сборка взаимодействия Office 2003 бесплатной, облегченной, распространяемой версией Office 2003?
16) Если на моем компьютере разработчика установлен Office 2007, могу ли я использовать PIA Office 2003 и доставить его клиенту с установленным Office XP?