按照 Hans Passant 的建议,我现在用我的解决方案的详细信息来回答我自己的问题。我能够在没有安装办公室的计算机上编译和运行我的项目。主要问题是让 Visual Studio 知道它可以从 COM 对象获得哪个接口。这是通过为 Outlook 查找主接口程序集 (PIA) 文件来解决的。这个过程在这个问题中得到了更好的描述,但简短的故事是我的电脑上已经有了办公室 PIA,在这个位置:
C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA
我用的是VS2010 pro,不知道其他版本是否包含文件。然后将相关文件复制到我的项目源文件夹中,包括在我的项目和源代码管理中,并对其进行引用。之后,我就可以在我的项目中使用 Outlook COM 类型并正确编译它。我也可以在没有安装办公室的情况下运行我的项目。这是通过尝试实例化相关的 COM 对象并在未安装 office 时捕获异常来实现的。以下示例代码显示了如何:
using Outlook = Microsoft.Office.Interop.Outlook;
namespace Foo
{
public class Bar
{
public void Quux()
{
try
{
// try to instantiate outlook COM object.
Outlook.Application outlookApp = new Outlook.Application();
// if it works, fine. Proceed
...
}
// If we catch a COMException, assume no office installed. Deal accordingly.
catch (System.Runtime.InteropServices.COMException)
{
...
}
}
}
}