Опция Strict On запрещает неявные преобразования, несовместимые с принудительным исполнением.

  • конфигурация 1: создание надстроек ESRI для ArcMap 10.4 с использованием Visual Studio 2015, ориентированных на платформу .NET 4.5.2
  • конфигурация 2: создание надстроек ESRI для ArcMap 10.3 с использованием Visual Studio 2013, предназначенных для платформы .NET 3.5.
  • конфигурация 3: создание надстроек ESRI для ArcMap 10.4 с использованием Visual Studio 2013, ориентированных на платформу .NET 4.5.2

Я пытаюсь понять, почему принудительное применение Option Strict On в проектах VB.NET не вызывает ошибку BC30512 в двух проектах, а в другом — в другом. Вот пример строки кода, которая вызывает ошибку при использовании конфигурации 1, но не вызывает ошибку при использовании конфигурации 2 или 3.

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

Кроме того, если я создам экземпляр управляемого класса вместо составного класса, ошибка не будет вызвана ни в одной из конфигураций (см. следующую строку):

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

Различные версии ArcMap определяют, какая версия платформы является целевой. В качестве дополнительной информации можно привести преобразование типов COM в .NET документации ArcObjects: Использование ArcObjects (на основе COM) в .NET (ArcObjects .NET 10.4 SDK)

Почему ошибка возникает в конфигурации 1, а не в конфигурации 2 или 3? И почему ошибка не возникает в конфигурации 1 при создании экземпляра с управляемым классом вместо сокласса?

Ссылка на проблему, отправленную в репозиторий dotnet/roslyn github. https://github.com/dotnet/roslyn/issues/13314

Спасибо, Ши.


person isburns    schedule 19.08.2016    source источник
comment
Интеграция Roslyn в VS2015 наделала много шума. Сценарий необычен, поэтому он не подвергался большому тестированию, Polygon - это тип интерфейса COM, интерфейс класса, поэтому синтаксически вы переходите непосредственно от одного интерфейса к другому, реализованному соклассом Polygon. Отказ от этого может быть преднамеренным, это может быть простой ошибкой. Склоняюсь к ошибкам. Нажмите кнопку New Issue, чтобы услышать мнение людей, которые над этим работают.   -  person Hans Passant    schedule 20.08.2016
comment
Спасибо, Ганс, я попробую третью конфигурацию, создав надстройку для ArcMap 10.4 с использованием Visual Studio 2013 и ориентируясь на .NET 4.5.2, и посмотрю, возникает ли ошибка, и отредактирую исходный пост, чтобы включить результаты этого теста.   -  person isburns    schedule 20.08.2016
comment
@isburns — если вы создадите новый выпуск, как рекомендовал Ганс, разместите ссылку здесь, чтобы его можно было просмотреть здесь.   -  person miroxlav    schedule 20.08.2016
comment
Подойдет @miroxlav, я хочу протестировать третью конфигурацию, прежде чем делать это.   -  person isburns    schedule 21.08.2016
comment
@miroxlav, я создал новый выпуск в репозитории github.   -  person isburns    schedule 23.08.2016
comment
@isburns – Хорошо. Возможно, вы можете опубликовать краткий ответ, описывающий это, и принять его, чтобы люди могли не только легко найти, но и проголосовать за ваши выводы/решение.   -  person miroxlav    schedule 23.08.2016


Ответы (1)


На данный момент кажется (как предположил Ханс Пассант в комментарии к исходному сообщению), что это действительно ошибка компилятора Roslyn в Visual Studio 2015. Я открыл проблему в репозитории dotnet/roslyn GitHub, и она была помечен как ошибка и назначен члену команды. Статус этого может измениться по мере изучения проблемы.

Ссылка на проблему и дополнительную информацию по устранению неполадок: https://github.com/dotnet/roslyn/issues/13314

person isburns    schedule 24.08.2016