在 Visual Studio 中添加对 Office 的 COM 互操作的引用的技术是:
- 参考
- 添加参考
- 选择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>
并且该项目已签入源代码管理,一切都很好。
然后构建项目,将其压缩到CD上,然后发送给拥有Office 2007的客户。
一切都不好。
在过去(即在 .NET dll 地狱之前),我们会使用与版本无关的 ProgID来引用 Office 对象,即:
"Excel.Application"
解析为已安装 Office 的clsid,例如
{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 有什么问题?例如:
[ComImport]
[Guid("00024500-0000-0000-C000-000000000046")]
public class Excel
{
}
8) 当一个人添加一个
- 参考COM 选项卡上的项目,
- 与使用 [ComImport] 不同,
- 而不是使用Office 2007 主互操作程序集?
9) 使用COM 选项卡添加引用是否与使用COM interop相同,只是它需要一个类型库才能看到它?
10) Office 2003 主要互操作程序集是否向后和向前兼容: - Office 14 - Office 2007 - Office 2003 - Office XP - Office 2000 - Office 97 - Office 95
如果客户和开发人员安装了新版本的 Office,它还能工作吗?
11) 我们是否必须将 Office 2003 主要互操作程序集与我们的应用程序一起提供?
12) 客户是否必须安装 Office 2003 主要互操作程序集才能使用我们的应用程序?
13) 如果客户安装 Office 2003 主要互操作程序集,他们是否必须安装Office?
14) 如果客户安装 Office 2003 主互操作程序集,他们是否必须安装 Office 2003?
15) Office 2003 Primary Interop Assembles 是 Office 2003 的免费、精简、可再发行版本吗?
16) 如果我的开发机器安装了 Office 2007,我是否可以使用 Office 2003 PIA,并运送给安装了 Office XP 的客户?