CsProj迁移:在Microsoft.Excel.Interop程序集上动态成为对象

时间:2018-09-20 14:02:05

标签: c# object dynamic visual-studio-2017 csproj

[VS 2017上的C#4.6]

我们目前(显然)正在将Csproj从旧格式迁移到新格式,并且我们面临着一个奇怪的问题。

一个项目正在使用Microsoft.Office.Interop.Excel程序集。在某些时候,我们像这样操作Excel Range属性:

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依赖项,但并不能解决任何问题。

任何帮助将不胜感激。 非常感谢!

1 个答案:

答案 0 :(得分:0)

可能在两年以上之后这不再重要,但对于面临同样问题的人来说:

您需要删除对 Bundle.Microsoft.Office.Interop / Microsoft.Office.Interop.Excel 的 NuGet 引用。

将 COM 引用添加到 Microsoft Excel 16.0 Object Library 并将 Copy LocalEmbed 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