108 votes

La version 10 ou supérieure de 'Microsoft.SqlServer.Types' n'a pas pu être trouvée sur Azure.

J'essaie de créer un webapi en ASP.NET MVC 4. Le webapi utilise les types Spatial d'Entity Framework 5 et j'ai écrit un code très simple.

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

La zone contient DbGeometry.

Lorsque je l'exécute localement, il fonctionne, mais lorsque je le publie sur Azure, il me donne cette erreur :

Les types et fonctions spatiaux ne sont pas disponibles pour ce fournisseur car l'assemblage 'Microsoft.SqlServer.Types' version 10 ou supérieure n'a pas pu être trouvé.

Quelqu'un sait-il comment résoudre ce problème ? :)

Gracias.

136voto

Thomas Bolander Points 535

J'ai trouvé la solution ! Il suffit d'installer le paquet nuget Microsoft.SqlServer.Types.

PM> Installer-Package Microsoft.SqlServer.Types

Lien pour plus d'informations

120voto

Chris Points 1490

El réponse Ce qui précède fonctionne bien lorsque la version 11 (SQL Server 2012) de l'assemblage peut être utilisée.

J'ai eu un problème avec cela car ma solution a d'autres dépendances sur la version 13 (SQL Server 2016) de la même assemblée. Dans ce cas, notez qu'Entity Framework (au moins la version 6.1.3) est codé en dur dans sa section SqlTypesAssemblyLoader (la source de cette exception) pour ne rechercher que les versions 10 et 11 de l'assemblage.

Pour contourner ce problème, j'ai découvert que vous pouvez indiquer à Entity Framework quel assemblage vous voulez utiliser comme ceci :

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

76voto

R2D2 Points 1175

Pour une raison quelconque, il me manquait une redirection de liaison qui a réglé ce problème pour moi.

L'ajout de ce qui suit a réglé mon problème

    <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>

26voto

Tarek El-Mallah Points 971

Il y a deux façons de résoudre ce problème :

  1. Si vous avez accès au serveur, installez simplement "Microsoft System CLR Types for SQL Server 2012". c'est à partir de https://www.microsoft.com/en-us/download/details.aspx?id=29065 Ou utilisez le lien direct ci-dessous Lien direct vers X86 : http://go.microsoft.com/fwlink/?LinkID=239643&clcid=0x409 Ou lien direct vers X64 : http://go.microsoft.com/fwlink/?LinkID=239644&clcid=0x409
  2. La deuxième façon est d'utiliser le gestionnaire de paquets NuGet et d'installer

    Installer-Package Microsoft.SqlServer.Types

Ensuite, suivez les notes du plugin comme ci-dessous

Pour déployer une application qui utilise des types de données spatiales sur une machine machine qui n'a pas installé 'System CLR Types for SQL Server', vous devez aussi vous devez également déployer l'assemblage natif SqlServerSpatial110.dll. Les deux sites versions x86 (32 bits) et x64 (64 bits) de cet assemblage ont été ajoutées à votre projet sous le nom de SqlServerTypes. \x86 et SqlServerTypes \x64 des sous-répertoires. L'assemblage natif msvcr100.dll est également inclus également inclus au cas où le runtime C++ ne serait pas installé.

Vous devez ajouter du code pour charger le bon de ces assemblages à l'endroit suivant d'exécution (en fonction de l'architecture actuelle).

Applications ASP.NET Pour les applications ASP.NET, ajoutez la ligne de code suivante ligne de code suivante à la méthode Application_Start dans Global.asax.cs :

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

Applications de bureau Pour les applications de bureau, ajoutez la ligne de code suivante suivante qui doit être exécutée avant toute opération spatiale :

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

18voto

Ertuğrul Üngör Points 201

Veuillez ajouter "dependentAssembly" dans le fichier 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>

Cela a fonctionné pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X