GAC中的Microsoft.SqlServer.Types.SqlGeography DLL

时间:2016-04-18 13:56:59

标签: c# dll gac sqlgeography

我安装了Nuget Microsoft.SqlServer.Types并且有DLL版本的问题。 我已阅读自述文件并在global.asax(Webform web app)

中添加了该行
protected void Application_Start(object sender, EventArgs e)
{
    SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
}
  

类型' System.InvalidCastException'的例外情况发生在System.Data.DataSetExtensions.dll中,但未在用户代码中处理

     

其他信息:[A] Microsoft.SqlServer.Types.SqlGeography kan niet worden geconverteerd naar [B] Microsoft.SqlServer.Types.SqlGeography。类型A是afkomstig uit Microsoft.SqlServer.Types,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91 in de context默认op locatie C:\ WINDOWS \ assembly \ GAC_MSIL \ Microsoft.SqlServer.Types \ 10.0.0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll。类型B是afkomstig uit Microsoft.SqlServer.Types,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91 in de context默认op locatie C:\ WINDOWS \ assembly \ GAC_MSIL \ Microsoft.SqlServer.Types \ 11.0.0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll。

这条线失败了:

var bla = myDataTable.AsEnumerable().Select(x => new
{
    Loc = x.Field<Microsoft.SqlServer.Types.SqlGeography>("theLocation") // breaks
}).ToList();

theLocation是我的Sql Server 2008中的数据类型地理位置,所以不幸的是没有2016 FOR JSON PATH选项。

PS。一些背景信息:我安装了nuget GeoJSON.Net和GeoJSON.Net.Contrib.MsSqlSpatial以获取地理数据类型行作为geojson。或者我应该在我的sql中添加.tostring并将其解析为geojson点?

1 个答案:

答案 0 :(得分:3)

Arne Klein (8 May 2014 5:08 AM)

找到
  

SqlClient默认加载Microsoft.SqlServer.Types版本10.0和SQL Server 2012 V. 11是必需的。将此问题添加到web.config。

可以解决此问题
<dependentAssembly>
    <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
    <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
  

如果可以更新Nuget包以自动将其添加到web.config中,那就太棒了。

我同意Arne的观点,即添加会很棒。