[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签名。这是我们看到的:
dynamic
object
结果是在新版本的csproj中出现了编译问题,因为显然ColorScaleCriteria
不被理解为object
的属性。
我们尝试了几种操作,例如在项目中添加System.Dynamic.Runtime
依赖项,但并不能解决任何问题。
任何帮助将不胜感激。 非常感谢!
答案 0 :(得分:0)
可能在两年以上之后这不再重要,但对于面临同样问题的人来说:
您需要删除对 Bundle.Microsoft.Office.Interop
/ Microsoft.Office.Interop.Excel
的 NuGet 引用。
将 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