代码:
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;
}
}异常:
无法将'Microsoft.Office.Interop.MSProject.ProjectClass‘类型的COM对象转换为接口类型'Microsoft.Office.Interop.MSProject._IProjectDoc'.此操作失败,因为对IID‘{00020B00-0000-0000-C000-000000000046}的接口的COM组件的QueryInterface调用失败,原因是以下错误: RPC服务器不可用。(HRESULT例外: 0x800706BA)
异常2: (此异常不会被try块捕获)
DisconnectedContext检测到 此RuntimeCallableWrapper转换到COM上下文0x265048失败,出现以下错误:请求的对象不存在。(HRESULT例外: 0x80010114)。这通常是因为创建此RuntimeCallableWrapper的COM上下文0x265048已断开连接,或者它忙于做其他事情,无法处理上下文转换。将不使用代理为COM组件上的请求提供服务,并且将直接调用COM组件。这可能会导致损坏或数据丢失。为了避免此问题,请确保所有COM上下文/单元/线程都保持活动状态,并可用于上下文转换,直到应用程序完全使用表示它们内部的COM组件的RuntimeCallableWrappers完成为止。
当我第一次访问project时,会抛出异常。我做错了什么?
而且,我还不熟悉Interop,当我访问一个文件时,它会与office一起打开,这让我感到困扰。难道没有办法只看它的内容而不打开它吗?
互操作运行时版本: v2.0.50727;
互操作版本: 14.0.0.0;
项目版本:2013年(15.0.4569.1504);
发布于 2014-08-28 19:10:08
解析很简单:停止使用Interop,这是垃圾。这很麻烦,需要很长时间来处理文档,在文档处理之前打开文档,有时根本不工作,不告诉你原因,除非它确实存在,而且您遇到了上述问题,没有人能帮上忙。
虽然MPXJ在.NET中实现了.NET,但它仍然比.NET好!
https://stackoverflow.com/questions/25508047
复制相似问题