2016-07-26 2 views
2

Я пытаюсь скомпилировать чужой проект. Они писали код, который выглядит следующим образом:Office Interop конструктор с аргументами

var doc = new Microsoft.Office.Interop.Word.Document(pathToFile); 

я могу скомпилировать его хорошо в Visual Studio 2010 (где она была разработана), но когда я компилирую тот же проект в Visual Studio 2015, он дает эту ошибку:

'Document' does not contain a constructor that takes 1 arguments 

В этом случае, документ представляет собой интерфейс:

[Guid("0002096B-0000-0000-C000-000000000046")] 
[CoClass(typeof(DocumentClass))] 
public interface Document : _Document, DocumentEvents2_Event { } 

И CoClass выглядит следующим образом:

[ComSourceInterfaces("Microsoft.Office.Interop.Word.DocumentEvents2")] 
[Guid("00020906-0000-0000-C000-000000000046")] 
[TypeLibType(2), ClassInterface(0)] 
public class DocumentClass : _Document, Document, DocumentEvents2_Event, DocumentEvents_Event 
{ 
    public DocumentClass(); 
    [DispId(-2147418112)] public virtual string _CodeName { get; set; } 

    ... 
} 

Определения выглядит идентично с точки зрения метаданных из обеих версий Visual Studio, и оба загрузки файла Interop из:

C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll 

Ни в одном случае не DocumentClass содержит конструктор не по умолчанию, но он компилирует в Visual Studio 2010.

Почему он компилируется в 2010 году? И учитывая, что он компилируется в 2010 году, почему он больше не компилируется в 2015 году?

И как я могу найти эквивалентный вызов для Visual Studio 2015, чтобы заставить его работать?

+0

+1 +1 вопрос. Мне интересно услышать ответ. Вы уверены, что использует ту же самую сборку? –

+0

Да, они оба используют 15.0.0.0__71e9bce111e9429c из GAC. –

+0

Я перепрограммировал в VS 2010. Strange ... –

ответ

2

Основываясь на тесте @roryap в комментариях, похоже, что Visual Studio 2010 разрешал недействительные вызовы конструктору COM-взаимодействия.

Я скомпилировал код в Visual Studio 2010 и использовать ILSpy, чтобы увидеть, что он генерировал:

doc = (Microsoft.Office.Interop.Word.Document)Activator.CreateInstance(
    Type.GetTypeFromCLSID(
     new Guid("00020906-0000-0000-C000-000000000046"))); 

путь Файл нигде не было видно. Visual Studio 2015 должна устранить ошибку, и она больше не игнорирует аргументы конструктора, как это было раньше.

 Смежные вопросы

  • Нет связанных вопросов^_^