首页 > 解决方案 > 获取“类型'SpatialReference'是在未引用的程序集中定义的。” 仅当未选中优化代码时

问题描述

我遇到了一个奇怪的编译错误,我对此完全感到困惑。

当我编译我的项目时,我得到了这个:

“SpatialReference”类型是在未引用的程序集中定义的。您必须添加对程序集“Esri.ArcGISRuntime, Version=10.2.7.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86”的引用。

不过,这不是奇怪的部分。只有当我在应用程序的 C# 项目设置中未选中“优化代码”时,我才会得到这个。

当我选中“优化代码”复选框时,它编译得很好,并且应用程序按预期运行。

应用程序中根本没有使用“SpatialReference”类型,并且该特定类型被包装在应用程序引用的另一个程序集中,据我所知,该类型没有从包装代码中泄漏出来。

使用相同包装程序集的其他应用程序将毫无问题地编译,无论优化代码状态如何,并且包装器程序集已使用近 5 年没有问题。

有没有其他人遇到过这个问题?如果是这样,你是如何解决的?

仅供参考,这些应用程序是 WinForms 应用程序。我正在使用 Visual Studio 2019 Enterprise v16.8.1

2020-11-22 更新

从我们的构建机器(受此影响)卸载 16.8 并重新安装 16.7.7 后,它编译得很好。这开始看起来像是 v16.8.x 的问题。

我应该注意以下几点:

我已经用细齿梳浏览了失败项目的 csproj 文件(使用文本编辑器),我没有看到任何不寻常的东西。

标签: c#visual-studiowinforms

解决方案


如果您安装了一些 NuGet 包,请先尝试清除 NuGet 缓存,然后重新安装 NuGet 包Esri.ArcGISRuntime

要清除 NuGet 缓存,请转到工具 > 选项 > NuGet 包管理器 > 常规 > 包还原 > 选择“允许 NuGet 下载丢失的包”和“在 Visual Studio 中构建期间自动检查丢失的包”> 然后单击Clear All NuGet Cache(s)按钮。

要重新安装 NuGet 包,请转到工具 > NuGet 包管理器 > 包管理器控制台 > 在包管理器控制台中输入Update-Package -reinstall以重新安装 NuGet 包。

之后,请重新启动VS并重建您的项目,检查此问题是否消失。如果此问题仍然存在,请尝试以下步骤进行故障排除:

1)。请关闭每个 VS 实例并转到您的解决方案文件夹,然后重命名(或删除)隐藏.vsbinobj文件夹,然后启动 VS 并重建您的解决方案。

2)。请转到此路径:C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\16.0_XXXX并重命名(或删除)每个名为“ComponentModelCache”的文件夹。

3)。请暂时禁用任何第三方扩展,从扩展 > 管理扩展 > 已安装 > 禁用并再次测试。

4)。请尝试从 Visual Studio 安装程序 > VS 2019 > 更多 > 修复来修复 Visual Studio 2019。


推荐阅读