Миграция CsProj: динамическое превращение в объект в сборке Microsoft.Excel.Interop

[C# 4.6 в VS 2017]

В настоящее время мы переводим наш Csproj из старого формата в новый (очевидно) и сталкиваемся с странной проблемой.

Один проект использует сборку Microsoft.Office.Interop.Excel. В какой-то момент мы манипулируем атрибутами диапазона Excel следующим образом:

public static void ApplyGradient(Range rng)
{
    rng.FormatConditions[1].ColorScaleCriteria[1].FormatColor.TintAndShade = 0;
}

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

Результатом является проблема компиляции в новой версии csproj, потому что ColorScaleCriteria явно не понимается как свойство object.

Мы попробовали несколько действий, например, добавили зависимость System.Dynamic.Runtime в наш проект, но это ничего не помогло.

Любая помощь будет принята с благодарностью. Большое спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
89
1

Ответы 1

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

Вам необходимо удалить ссылку NuGet на Bundle.Microsoft.Office.Interop / Microsoft.Office.Interop.Excel.

Добавьте ссылку COM на Microsoft Excel 16.0 Object Library и установите Copy Local и Embed Interop Types на Yes.

Или вы можете просто добавить это в свой файл .csproj:

  <ItemGroup>
    <COMReference Include = "Microsoft.Office.Excel.dll">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>9</VersionMinor>
      <VersionMajor>1</VersionMajor>
      <Guid>00020813-0000-0000-c000-000000000046</Guid>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
      <EmbedInteropTypes>true</EmbedInteropTypes>
      <Private>true</Private>
    </COMReference>
  </ItemGroup>

Получил решение из этой ветки: https://stackoverflow.com/a/59138607

Другие вопросы по теме