在 Visual Studio 中添加对 Office 的 COM 互操作的引用的技术是转到:

  1. 参考
  2. 添加参考
  3. 选择 通讯 标签
  4. 选择 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>

该项目已检查到源代码控制,一切顺利。


然后开发人员 办公室2007 从源代码管理获取项目,但无法构建它,因为这样的引用不存在。

他(即me) 检查 .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>

该项目已检查到源代码控制,一切顺利。


然后开发人员 办公室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, ,并发送给有的客户 办公室2007.

一切都不太好。


在过去(即在.NET dll hell之前),我们将使用 与版本无关的 ProgID, , IE。:

"Excel.Application"

这解析为 克西德 已安装的 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)有没有 办公室2007 主要互操作程序集?

6) 如果我安装 Office 2007 主互操作程序集,是否必须安装 Office 2007?

7) 使用标准 COM 互操作来驱动 Excel、Word 或 Outlook 有什么问题?例如。:

[ComImport]
[Guid("00024500-0000-0000-C000-000000000046")]
public class Excel
{
}

8) 当一个人添加一个

  • 参考 到项目 通讯选项卡,
  • 与使用 [ComImport] 相反,
  • 而不是使用 Office 2007 主要互操作程序集?

9)正在使用添加引用 通讯选项卡 与使用相同 COM互操作, ,除了它需要一个 类型库 在你能看到它之前?

10) Office 2003 主互操作程序集是否向后和向前兼容:- 办公室 14 - 办公室 2007 - 办公室 2003 - 办公室XP - 办公室 2000 - 办公室 97 - 办公室 95

如果客户和开发人员安装了新版本的 Office,它仍然可以使用吗?

11) 我们是否必须随应用程序一起运送 Office 2003 主互操作程序集?

12) 客户是否必须安装 Office 2003 主互操作程序集才能使用我们的应用程序?

13) 如果客户安装 Office 2003 主互操作程序集,他们是否必须拥有 办公室 安装了?

14) 如果客户安装 Office 2003 主互操作程序集,他们是否必须拥有 Office 2003 安装了?

15) Office 2003 主互操作程序集是 Office 2003 的免费、精简版、可再发行版本吗?

16) 如果我的开发计算机装有 Office 2007,我可以使用 Office 2003 PIA 并将其交付给安装了 Office XP 的客户吗?

有帮助吗?

解决方案 2

答案是“复制本地”您为互操作获得的任何程序集 dll。将程序集 dll 放入输出文件夹后,添加对其的引用,并将其签入源代码管理。

现在大家都有引用的程序集dll了。

其他提示

哇,这是一个巨大的问题。我认为,一般来说,如果您的应用程序使用 PIA,那么您就假设您的目标受众安装了某个版本的 Office。当目标用户安装 Office 时,PIA 将安装在 GAC 中。如果他们没有安装 Office 那么您为什么要定位 Office?

是的,Office dll 是自动化 Office 的正确方法。有一个程序集列表 这里, ,包括一些适用于 Office 2007 的软件。

你使用VSTO(Visual studio 办公工具)吗?

http://msdn.microsoft.com/en-us/office/aa905533.aspx

一个旧线程,可能大多数人都会对 CopyLocal=True 感到满意,但是这是另一种方式..使用 两个都 (或者更多..?考虑 Office 2010 如果问题仍然存在..) 在项目文件中引用,然后忽略或只是告诉 MSBuild 忽略“MSB3284”警告(未找到库)。因此,将其包含在您的 .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>

其次是:

<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>

我很想知道 Microsoft 是否为此提供了 NuGet 库 - 只是为了让每个人都采用相同的方法。我认为这将消除人们在网络上搜索这些答案的必要性......我相信这违反了 Microsoft Office 的许可证,因此他们是唯一提供它的人。

顺便说一句,使用本地复制时,您必须小心不要错误地重新分发这些库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top