Подтвердить что ты не робот

"Microsoft.SqlServer.Types" версии 10 или выше не удалось найти на Azure

Я пытаюсь создать webapi в ASP.NET MVC 4. Webapi использовал Entity Framework 5 Spatial типов, и я написал очень простой код.

  public List<Area> GetAllAreas()
    {
        List<Area> aList = db.Areas.ToList();
        return aList;
    }

Область содержит DbGeometry.

Когда я запускаю этот локальный, он работает, но когда я публикую его на лазурном, он дает мне эту ошибку:

Пространственные типы и функции недоступны для этого провайдера, потому что не удалось найти сборку "Microsoft.SqlServer.Types" версии 10 или выше.

Кто-нибудь знает, как это решить?:)

Спасибо!

4b9b3361

Ответ 2

Ответ выше работает нормально, когда можно использовать версию 11 (SQL Server 2012) сборки.

У меня была проблема с этим, поскольку у моего решения есть другие зависимости от версии 13 (SQL Server 2016) той же сборки. В этом случае обратите внимание, что Entity Framework (по крайней мере v6.1.3) жестко закодирован в его SqlTypesAssemblyLoader (источник этого исключения), чтобы искать только версии 10 и 11 сборки.

Чтобы обойти это, я обнаружил, что вы можете указать Entity Framework, какую сборку вы хотите использовать, вот так:

SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;

Ответ 3

По какой-то причине мне не хватало переадресации привязки, которая исправила эту проблему для меня.

Добавление следующей исправленной проблемы

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

Ответ 4

Есть два способа исправить это:

Затем следуйте за комментариями плагинов ниже

Развернуть приложение, использующее типы пространственных данных для машины у которого нет "Системных CLR-типов для SQL Server", установленных вами также необходимо развернуть собственную сборку SqlServerSpatial110.dll. И то и другое x86 (32-разрядные) и 64-разрядные версии этой сборки были добавлен в ваш проект под SqlServerTypes\x86 и SqlServerTypes\x64 подкаталоги. Собственная сборка msvcr100.dll также включается в случае, если среда выполнения С++ не установлена.

Вам нужно добавить код для загрузки правильной одной из этих сборок в (в зависимости от текущей архитектуры).

Приложения ASP.NET Для приложений ASP.NET добавьте следующую строку кода к методу Application_Start в Global.asax.cs:

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));

Настольные приложения Для настольных приложений добавьте следующую строку кода для запуска до выполнения любых пространственных операций:

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

Ответ 5

Я также столкнулся с этой проблемой, но пакет nuget Microsoft.SqlServer.Types уже установлен.

Что решила проблема для меня, я собираюсь решить проблему > Ссылки > System.Data.Entity > Свойствa > Скопировать локальную и установить ее в True.

Примечание: Копировать локальное для Microsoft.SqlServer.Types уже установлено значение true, и хотя проблема была в System.Data.Entity, сообщение об ошибке по-прежнему содержалось в Microsoft.SqlServer.Types.

Решение от форум Windows Azure.

Ответ 6

Пожалуйста, добавьте "зависящий от сборки" файл Web.config

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <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>
    </assemblyBinding>
</runtime>

Это работает для меня

Ответ 7

Решение для меня просто добавило эту строку кода в Global.asax.cs в Application_Start():

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));

Удачи моим братьям.

Ответ 8

После комментария в ответе на текущее сообщение добавление этих двух строк (предпочтительно в основную функцию) решило мою проблему для консольного приложения:

SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

Ответ 9

Ни один из вышеперечисленных решений не работал.

  • Установлен пакет функций SQL Server? Да
  • Установлен пакет NuGet? Да
  • DLL существует в GAC и в билете проекта? Да

Знаете, эта ошибка также может быть вызвана низкими ресурсами на сервере. Я перезапустил SQL-сервер, и он автоматически разрешился.

Ответ 10

Просто такая же проблема. Я использую EF6 и вызываю SQL, у которого есть функция SQL, которая использует пространственные команды. Я тестировал это через unit test, и он работал нормально. Когда я подключился к моему решению Asp.Net, я получил ошибку

Пространственные типы и функции для этого провайдера недоступны потому что сборка "Microsoft.SqlServer.Types" версии 10 или выше не удалось найти.

Добавив пакет NUGET "Microsoft.SqlServer.Types" и добавив SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin")); в Application_Start method в Global.asax.cs, все сработало нормально.

Ответ 11

В моем случае это вызвало плохо составленную строку подключения. Проверьте правильность составления строки подключения.

Ответ 12

В моем случае (приложение WebForms) я решил проблему, добавив следующие строки в Application_Start файла Global.asax.

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
System.Data.Entity.SqlServer.SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";

Я надеюсь, что это кому-то поможет.