У меня возникли некоторые проблемы, связанные с обновлением .NET Framework 3.5 до 4.6.1. Обновление вызывает ошибку: CS1769 Type 'CustomClass1<CustomClass2>.CustomClass3<ESRI.ArcGIS.Geodatabase.IWorkspace>' from assembly 'CustomAssemblyReferencedByProjectWhereErrorOccurs, Version=x.x.x.x, Culture=neutral, PublicKeyToken=null' cannot be used across assembly boundaries because it has a generic type argument that is an embedded interop type ProjectWhereErrorOccurs.
Для пояснения, CustomAssemblyReferencedByProjectWhereErrorOccurs
— это пакет Nuget, установленный в ProjectWhereErrorOccurs
.
Мое понимание причины вышеуказанной ошибки потенциально ошибочно, но я думаю, что это означает, что CustomAssemblyReferencedByProjectWhereErrorOccurs
имеет ссылку на dll ESRI, содержащую IWorkspace
, то есть ESRI.ArcGIS.Geodatabase
, И ProjectWhereErrorOccurs
также имеет ссылку на ESRI.ArcGIS.Geodatabase
, НО в CustomAssemblyReferencedByProjectWhereErrorOccurs
параметр Embed Interop Types
был установлено значение False
, а в ProjectWhereErrorOccurs
для параметра БЫЛО установлено значение True
. Чтобы исправить эту ошибку, я установил Embed Interop Types
на False
как в ProjectWhereErrorOccurs
, так и в CustomAssemblyReferencedByProjectWhereErrorOccurs
. См. https://stackoverflow.com/a/40761456/15739713 и http://www.dllshepherd.net/2011/02/build-error-using-com-references-in-net.html за то, что привело меня к этому исправлению.
Итак, исправление КАЖЕТСЯ сработало, но теперь я получаю CS1760 Assemblies 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\ESRI.ArcGIS.Geodatabase\v4.0_10.8.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.Geodatabase.dll' and 'C:\Program Files (x86)\ArcGIS\DeveloperKit10.8\DotNet\ESRI.ArcGIS.Geodatabase.dll' refer to the same metadata but only one is a linked reference (specified using /link option); consider removing one of the references. ProjectWhereErrorOccurs.
Первая сборка в C:\WINDOWS
, по-видимому, является какой-то глобальной сборкой. Вторая сборка в C:\Program Files (x86)
, очевидно, является частью ArcObjects
, но вот что меня смущает: ссылки как в CustomAssemblyReferencedByProjectWhereErrorOccurs
, так и в ProjectWhereErrorOccurs
относятся к dll ArcObjects
в C:\Program Files (x86)
.
Я прочитал Сборки ссылаться на одни и те же метаданные, но только один из них является связанной ссылкой; рассмотрите возможность удаления одной из ссылок и Microsoft.Office.Interop.Excel.dll" ссылаются на одни и те же метаданные, но только одна является связанной ссылкой, а комментарий в первой ссылке предлагает использовать ссылку COM. Я не знаю, что является ссылкой на COM, но я попытался удалить ссылку на ESRI.ArcGIS.Geodatabase
и добавить ее обратно, но на этот раз указал на C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\ESRI.ArcGIS.Geodatabase\v4.0_10.8.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.Geodatabase.dll
вместо C:\Program Files (x86)\ArcGIS\DeveloperKit10.8\DotNet\ESRI.ArcGIS.Geodatabase.dll
, но я получил исправленную версию сообщения об ошибке, CS1760 Assemblies 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\ESRI.ArcGIS.System\v4.0_10.8.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.System.dll' and 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\ESRI.ArcGIS.System\v4.0_10.8.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.System.dll' refer to the same metadata but only one is a linked reference (specified using /link option); consider removing one of the references.
Кто-нибудь знает, что здесь происходит и/или как это исправить? Кроме ссылки, о которой я знаю, что еще указывает на ESRI dll?