Вопрос

Некоторое время назад я написал несколько примеров взаимодействия Word в Visual Studio beta 1 и установил ссылку на Microsoft.Office.Interop.Word для встраивания (установите " Embed Interop Types " = true в ссылочных свойствах). Они работали нормально, и я не запускал их некоторое время ... до сегодняшнего дня.

Конечно, сейчас я работаю в бета-версии 2 Visual Studio 2010 и .NET 4.0 - и, похоже, она несколько не работает.

Вот код, о котором идет речь (просто фиктивный пример кода):

using Microsoft.Office.Interop.Word;

class WordImprovement1
{
    static void Main()
    {
        Application app = new Application { Visible = true };
        app.Documents.Add();
        Document doc = app.ActiveDocument;            
        Paragraph para = doc.Paragraphs.Add();
        para.Range.Text = "Thank goodness for C# 4";

        object filename = "demo.doc";
        object format = WdSaveFormat.wdFormatDocument97;
        doc.SaveAs(FileName: ref filename, FileFormat: ref format);
        doc.Close();
        app.Quit();
    }
}

Вот исключение, которое я получаю большую часть времени, когда " Вставить типы взаимодействия " установлен в значение "истина" или я связываюсь с "/ l" в командной строке:

System.MissingMethodException: Method not found:
'Void Microsoft.Office.Interop.Word._Application.set_Visible(Boolean)'.
   at WordImprovement1.Main()

Очень редко это работает, что еще более странно.

Если я установлю " Вставить типы взаимодействия " на "ложь" (или используйте / r в командной строке вместо / l) все работает нормально.

Если я удалю " Visible = true " Установка свойств это тоже работает ... но я знаю , что свойство там есть ... это даже предлагает IntelliSense!

Несмотря на то, что я еще не провел исчерпывающее тестирование на нескольких устройствах, я могу подтвердить, что мой нетбук (под управлением Windows 7 вместо Vista, но все еще .NET 4.0 beta 2) сталкивается с той же проблемой.

Есть ли какие-либо предложения относительно того, что это я сломался или .NET 4.0 beta 2?

Это было полезно?

Решение

Отличный улов! Это похоже на ошибку в нашей генерации кода для индексированных свойств (неизвестно, так что спасибо за сообщение об этом!) Я попробовал последнюю внутреннюю сборку VS 2010, и она также воспроизводит.

Что происходит, если вы используете инициализатор объекта, то генерируется следующий код:

Application <>g__initLocal19 = (Application) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));
<>g__initLocal19.set_Visible(true);

Однако, если вы устанавливаете Visible = true в отдельном операторе (без инициализатора объекта), то генерируется следующий код:

Application application = (Application) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));
application.Visible = true;

PIA определяет только нижнюю, поэтому она не работает, когда вы используете инициализатор объекта. Обходной путь на данный момент - установить Visible в отдельном операторе, который должен работать нормально.

Я зарегистрировал ошибку об этом. Еще раз спасибо!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top