Код:
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 был обнаружен
Переход в COM-контекст 0x265048 для этого RuntimeCallableWrapper не удалось со следующей ошибкой: запрошенный объект не существует. (Исключение из HRESULT: 0x80010114). Обычно это связано с тем, что контекст COM 0x265048, где был создан этот RuntimeCallableWrapper, отключен или занят чем-то другим и не может обработать переход к контексту. Прокси-сервер не будет использоваться для обслуживания запроса на COM-компоненте, и вызовы будут напрямую передаваться на COM-компонент. Это может привести к повреждению или потере данных. Чтобы избежать этой проблемы, убедитесь, что все контексты COM/апартаменты/потоки остаются в живых и доступны для перехода к контексту, пока приложение не будет полностью выполнено с помощью RuntimeCallableWrappers, который представляет COM-компоненты, которые живут внутри них.
Когда я впервые получаю доступ к project
генерируется исключение. Что я делаю не так?
Кроме того, я новичок в Interop, и это беспокоит меня, что когда я обращаюсь к файлу, он открывается с офисом. Разве нет возможности только просмотреть его содержимое и не открывать его?
Interop Runtime Версия: v2.0.50727;
Interop Version: 14.0.0.0;
Версия проекта: 2013 (15.0.4569.1504);
Разрешение прост: прекратите использование Interop, это GARBAGE. Это беспорядочно, навсегда обрабатывает документы, открывает документы, прежде чем он сможет обработать их, а иногда просто не работает и не скажет вам, почему, если только это не так, и у вас есть проблемы, подобные выше, где никто не может помочь.
Хотя MPXJ реализует Java внутри.NET, он все же лучше Interop!