"Microsoft.SqlServer.Types.dll"和"Microsoft.SqlServer.Types.dll"中都存在"Microsoft.SqlServer.Types.SqlGeography"类型

Dry*_*ods 5 c# sql-server

在我的Windows类库(由MVC网站使用)中,我安装了NugetPackage Microsoft.SqlServer.Types (Spatial).

现在,使用ado.net我试图通过执行以下操作来读取值:

protected SqlGeography MapSqlGeography(DbDataReader reader, string key)
{
      return reader[key] is DBNull ? null : (SqlGeography)reader[key];
}
Run Code Online (Sandbox Code Playgroud)

如果我在此行中添加制动点并在visual studio观察窗口中输入:"reader [key]",我可以看到正确的Point(XXXX,XXX)类型:" object {Microsoft.SqlServer.Types.SqlGeography}"

但是,一旦我尝试进行演员,我就会出现以下错误:

(SqlGeography)reader[key]   The type 'Microsoft.SqlServer.Types.SqlGeography' exists in both
 'Microsoft.SqlServer.Types.dll' and 
 'Microsoft.SqlServer.Types.dll'
Run Code Online (Sandbox Code Playgroud)

主要的奇怪事实是dll完全一样......

据我所知,这个命名空间/类名只有一个"源",它不应该重复....

我的"使用"是:

using Microsoft.SqlServer.Types;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.SqlClient;
using System.Threading.Tasks;
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?谢谢.

更新#1

我卸载了NugetPackage`Microsoft.SqlServer.Types(Spatial)',而是尝试了一个名为:'Microsoft.SqlServer.Types(Unofficial)',甚至在清理了所有以前的文件夹/文件并清理了"bin/obj"之后",我仍然有完全相同的例外......

我现在只是看到了这个原因......任何想法都会非常感激.

更新#2

刚试过用 extern alias destination;

return reader[key] is DBNull 
        ? null 
        : (destination.Microsoft.SqlServer.Types.SqlGeography)reader[key];
Run Code Online (Sandbox Code Playgroud)

有例外:

Cannot cast 'reader[key]' (which has an actual type of 'Microsoft.SqlServer.Types.SqlGeography') 
to 
'Microsoft.SqlServer.Types.SqlGeography'
Microsoft.SqlServer.Types.SqlGeography
Run Code Online (Sandbox Code Playgroud)

Mih*_*scu 2

运行时使用以下步骤来解析程序集引用:

  1. 通过检查适用的配置文件(包括应用程序配置文件、发布者策略文件和计算机配置文件)来确定正确的程序集版本。如果配置文件位于远程计算机上,则运行时必须首先找到并下载应用程序配置文件。
  2. 检查程序集名称是否已绑定到之前,如果是,则使用之前加载的程序集。
  3. 检查全局程序集缓存。如果在那里找到该程序集,则运行时将使用该程序集。
  4. 使用以下步骤对组件进行探针:
    • 如果配置和发布者策略不影响原始引用,并且如果绑定请求是使用 Assembly.LoadFrom 方法创建的,则运行时会检查位置提示。
    • 如果在配置文件中找到代码库,则运行时仅检查此位置。如果此探测失败,运行时将确定绑定请求失败,并且不会发生其他探测。
    • 使用探测部分中描述的启发式探测程序集。如果在探测后未找到程序集,运行时将请求 Windows Installer 提供程序集。这充当按需安装功能。注意 没有对没有强名称的程序集进行版本检查,运行时也不会在全局程序集缓存中检查没有强名称的程序集。

现在,检查您是否引用了多个程序集(如 Damien_The_Unknowner 在评论中所说),或者您没有为该程序集设置特定版本。

您还可以尝试使用程序集绑定日志查看器 (Fuslogvw)来准确查看加载的内容以及搜索路径。