代码:
ApplicationClass projectApp = new ApplicationClass();
if (projectApp.FileOpen(path, true, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
PjPoolOpen.pjDoNotOpenPool, Missing.Value, Missing.Value, Missing.Value, Missing.Value))
{
projects = new List<Project>(projectApp.Projects.Cast<Project>());
foreach (Project project in projects)
{
MSProjectProject msProject = new MSProjectProject();
msProject.Author = project.Author.ToString(); // ERROR HERE
msProject.Name = project.Name;
}
}
例外:
无法转换类型的COM对象 接口的'Microsoft.Office.Interop.MSProject.ProjectClass' 键入“Microsoft.Office.Interop.MSProject._IProjectDoc”。这个操作 失败,因为QueryInterface调用了COM组件 与IID'{00020B00-0000-0000-C000-000000000046}'的接口失败 出现以下错误:RPC服务器不可用。 (例外 HRESULT:0x800706BA)。
异常2:(这个不会被try块捕获)
检测到DisconnectedContext
为此RuntimeCallableWrapper转换到COM上下文0x265048 失败,出现以下错误:请求的对象不存在。 (来自HRESULT的异常:0x80010114)。这通常是因为 创建此RuntimeCallableWrapper的COM上下文0x265048具有 已断开连接或正忙于做其他事情而不能 处理上下文转换。没有代理将用于服务 对COM组件的请求和调用将发送给COM 组件直接。这可能会导致损坏或数据丢失。避免 这个问题,请确保所有COM上下文/公寓/线程 保持活力,可用于上下文过渡,直到 应用程序完全使用RuntimeCallableWrappers完成 代表它们内部的COM组件。
当我第一次访问project
时,抛出异常。我做错了什么?
另外,我是Interop的新手,当我访问一个文件时,它会让我感到困扰。有没有办法只查看其内容而不是打开它?
Interop Runtime版本: v2.0.50727;
互操作版本: 14.0.0.0;
项目版本: 2013(15.0.4569.1504);
答案 0 :(得分:0)
分辨率很简单:停止使用Interop,它是GARBAGE。它很麻烦,需要永远处理文档,在处理文档之前打开文档,有时根本不会工作而不告诉你原因,除非它确实存在并且你有上述问题,没有人可以提供帮助。
虽然MPXJ在.NET中实现了Java,但它仍然优于Interop!