“Option Strict On禁止隐式转换”执行不一致

时间:2016-08-19 20:53:46

标签: vb.net visual-studio com arcobjects rcw

  • 配置1:使用面向.NET 4.5.2框架的Visual Studio 2015为ArcMap 10.4构建ESRI加载项
  • 配置2:使用面向.NET 3.5框架的Visual Studio 2013为ArcMap 10.3构建ESRI加载项
  • 配置3:使用面向.NET 4.5.2框架的Visual Studio 2013为ArcMap 10.4构建ESRI加载项

我试图理解为什么VB.NET项目中的Option Strict On强制执行不会在两个项目中引发错误BC30512而在另一个项目中会引发错误。下面是一个示例代码行,它使用配置1触发错误,但不会触发配置2或3的错误。

Dim bufferedPolygon As ESRI.ArcGIS.Geometry.IGeometry = New ESRI.ArcGIS.Geometry.Polygon

此外,如果我实例化托管类而不是coclass,则在任一配置中都不会触发错误(请参阅以下行):

Dim bufferedPolygon As ESRI.ArcGIS.Geometry.IGeometry = New ESRI.ArcGIS.Geometry.PolygonClass

不同版本的ArcMap决定了该框架的目标版本。对于其他背景,ArcObjects文档的COM到.NET类型转换是相关的: Using ArcObjects (COM-based) in .NET (ArcObjects .NET 10.4 SDK)

为什么在配置1中触发错误而不在配置2或3中触发?当使用托管类而不是coclass实例化时,为什么不在配置1中触发错误?

链接到dotnet / roslyn github存储库提交的问题。 https://github.com/dotnet/roslyn/issues/13314

由于 乳木果

1 个答案:

答案 0 :(得分:1)

此时,正如Hans Passant在对原始帖子的评论中所建议的那样,这确实是Visual Studio 2015中Roslyn编译器的一个错误。我在dotnet / roslyn GitHub存储库中打开了一个问题,它已被标记为错误并分配给团队成员。在调查问题时,这种情况可能会发生变化。

问题的链接和其他问题排查信息为here