在单元测试之前加载Microsoft.SqlServer.Types的正确方法是什么

时间:2017-05-04 00:28:33

标签: c# sql-server nunit

我尝试使用NUnit为依赖DbGeography.PointFromText(text, 4326)的代码编写一些单元测试,这需要加载Microsoft.SqlServer.Types。我试图使用以下方式加载它:

[OneTimeSetUp]
public void Startup()
{
    SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
}

我还尝试使用[Setup]方法加载它们。当调用使用DbGeography的代码时,我最终得到了一个可爱的例外:

  

System.InvalidOperationException:空间类型和函数不是   可用于此提供程序,因为程序集   ' Microsoft.SqlServer.Types'无法找到10或更高版本。

我确实安装了Microsoft.SqlServer.Types Nuget软件包,它在我的Web API 2.2应用程序中工作得很好。

2 个答案:

答案 0 :(得分:0)

我最终安装了Microsoft SQL Server CLR类型,我的单元测试能够找到必要的类型。

答案 1 :(得分:0)

您可以在系统上安装库,但是随后还需要记住要在构建服务器和生产环境等上安装。

或者,已经成功完成了Microsoft.SqlServer.Types NuGet的安装并按照说明加载了程序集。对于xunit,我将其包含在TextFixure ctor中。

        SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

另外,发现我需要添加bindingRedirects:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
  </dependentAssembly>