Надстройка VSTO больше не компилируется при добавлении в решение одного файла .xaml - PullRequest
0 голосов
/ 08 мая 2020

Давайте рассмотрим надстройку Excel VSTO и добавим в нее такой класс:

public class SomeClass
{
    public Range GetCell(Worksheet worksheet)
    {
        return worksheet.Cells[1, 1];
    }
}

Давайте скомпилируем его; он работает, даже если ничего не делает. Теперь добавьте в проект UserControl (WPF), не ссылаясь на него и не используя его: просто добавьте элемент. Если вы перекомпилируете ie, вы получите сообщение об ошибке:

CS0266  Cannot implicitly convert type 'object' to 'Microsoft.Office.Interop.Excel.Range'. An explicit conversion exists (are you missing a cast?)  

Это относится к возвращаемому типу члена Cells[1,1].

Внимание! Иногда ошибка даже не появляется, если вы не укажете "Только сборка" в поле, показанном здесь.

Кажется, что-то в динамике c отключено ... но почему?

Build Only Box

Возможное решение

При необходимости по-прежнему возможно преобразование типов, фактически это работает:

return (Range)worksheet.Cells[1, 1];

Проблема в том, что объектная модель офиса уже довольно многословна и сильно зависит от Dynami c. Это означает, что в реальном приложении вам потребуется много таких приведений типов, что в итоге приведет к появлению множества приведений типов на строку.
Не говоря уже о том, что эта проблема может указывать на то, что где-то происходит что-то очень неправильное, поэтому Я бы предпочел решить эту проблему, чем прибегать к приведению типов в качестве обходного пути.

Я тестировал это на VS2017 с надстройкой VSTO 2010 и надстройкой VSTO 2013-16, результат тот же. . NET Framework 4.7.2.

1 Ответ

1 голос
/ 08 мая 2020

Пожалуйста, отключите и включите типы взаимодействия для Excel, он будет отсортирован.

Полное имя библиотеки, как показано в ссылках на проект: Microsoft.Office.Interop.Excel Параметр для отключения, а затем включения - Вставьте типы взаимодействия в справочные свойства.

...