Сборки «C:\WINDOWS\PathToEsriDll» и «C:\Program Files (x86)\PathToEsriDll» ссылаются на одни и те же метаданные, но только одна из них является связанной ссылкой.

У меня возникли некоторые проблемы, связанные с обновлением .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?


person The Other Lebowski    schedule 29.07.2021    source источник