106

ASP.NET MVC4でWebAPIを作成しようとしています。WebAPIはEntityFramework5 Spatialタイプを使用しており、非常に単純なコードを記述しました。

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

エリアにはDbGeometryが含まれています。

このローカルを実行すると機能しますが、Azureに公開すると、次のエラーが発生します。

アセンブリ'Microsoft.SqlServer.Types'バージョン10以降が見つからなかったため、このプロバイダーでは空間タイプと関数を使用できません。

誰もがこれを解決する方法を知っていますか?:)

ありがとう!

4

12 に答える 12

136

私は解決策を見つけました!nugetパッケージMicrosoft.SqlServer.Typesをインストールするだけです

PM>インストール-パッケージMicrosoft.SqlServer.Types

詳細についてはリンク

于 2012-11-01T10:23:05.950 に答える
120

上記の答えは、アセンブリのバージョン11(SQL Server 2012)を使用できる場合に正常に機能します。

私のソリューションには同じアセンブリのバージョン13(SQL Server 2016)に他の依存関係があるため、これに問題がありました。この場合、Entity Framework(少なくともv6.1.3)はそのSqlTypesAssemblyLoader(この例外のソース)にハードコーディングされており、アセンブリのバージョン10と11のみを検索することに注意してください。

これを回避するために、次のように使用するアセンブリをEntityFrameworkに指示できることを発見しました。

SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
于 2016-10-20T23:40:04.670 に答える
76

何らかの理由で、この問題を修正するバインディングリダイレクトがありませんでした。

以下を追加すると問題が解決しました

    <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>
于 2017-06-29T08:27:04.310 に答える
26

これを修正する方法は2つあります。

  1. サーバーにアクセスできる場合は、https://www.microsoft.com/en-us/download/details.aspx?id= 29065から「MicrosoftSystemCLRTypes for SQL Server 2012」をインストールするか、直接リンクの下にある直接リンクを使用してください。 X86へ:http://go.microsoft.com/fwlink/ ?LinkID = 239643&clcid = 0x409、またはX64への直接リンク:http://go.microsoft.com/fwlink/ ?LinkID = 239644&clcid = 0x409
  2. 2番目の方法は、NuGetパッケージマネージャーを使用してインストールすることです

    インストールパッケージMicrosoft.SqlServer.Types

次に、以下のプラグインノートに従ってください

空間データ型を使用するアプリケーションを、「SQL ServerのシステムCLR型」がインストールされていないマシンに展開するには、ネイティブアセンブリSqlServerSpatial110.dllも展開する必要があります。このアセンブリのx86(32ビット)バージョンとx64(64ビット)バージョンの両方が、プロジェクトのSqlServerTypes\x86およびSqlServerTypes\x64サブディレクトリに追加されました。C ++ランタイムがインストールされていない場合に備えて、ネイティブアセンブリmsvcr100.dllも含まれています。

実行時にこれらのアセンブリの正しい1つをロードするコードを追加する必要があります(現在のアーキテクチャによって異なります)。

ASP.NETアプリケーションASP.NETアプリケーションの場合、Global.asax.csのApplication_Startメソッドに次のコード行を追加します。

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

デスクトップアプリケーションデスクトップアプリケーションの場合、空間操作を実行する前に実行する次のコード行を追加します。

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
于 2017-01-31T13:43:41.437 に答える
17

Web.configファイルに「dependentAssembly」を追加してください

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

これは私のために働いた

于 2018-08-16T14:09:29.410 に答える
13

この問題も発生しましたが、Microsoft.SqlServer.Typesnugetパッケージは既にインストールされています。

私にとって問題を解決したのは、[ソリューション]>[参照]>[System.Data.Entity]>[プロパティ]>[ローカルのコピー]に移動し、Trueに設定することでした。

注: Microsoft.SqlServer.Typesのローカルコピーは既にtrueに設定されており、System.Data.Entityに問題があったとしても、エラーメッセージはMicrosoft.SqlServer.Typesに関するものでした。

解決策は、WindowsAzureフォーラムからのものです。

于 2013-01-08T19:25:50.360 に答える
5

私にとっての解決策は、このコード行をGlobal.asax.csに追加することでしたApplication_Start()

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

兄弟たち、頑張ってください。

于 2016-08-26T12:15:46.477 に答える
3

現在の投稿に対する回答のコメントに続いて、これらの2行を追加すると(できればmain関数に)、コンソールアプリの問題が解決しました。

SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
于 2018-10-31T16:25:06.313 に答える
3

私の場合(WebFormsアプリ)Application_StartGlobal.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";

私はそれが誰かを助けることを願っています。

于 2019-09-12T17:36:17.030 に答える
1

上記の解決策はどれも私にはうまくいきませんでした。

  • SQL Server機能パックがインストールされていますか?はい
  • NuGetパッケージがインストールされていますか?はい
  • DLLはGACとプロジェクトビンに存在しますか?はい

このエラーは、サーバーのリソースが少ないことが原因である可能性もあります。SQL Serverを再起動すると、自動的に解決されました。

于 2016-10-20T11:14:01.090 に答える
0

ちょうど同じ問題がありました。空間コマンドを使用するSQL関数を使用して呼び出していますEF6SQL私はこれを単体テストでテストしましたが、正常に機能しました。ソリューションを配線しようとするとAsp.Net、エラーが発生しました

アセンブリ'Microsoft.SqlServer.Types'バージョン10以降が見つからなかったため、このプロバイダーでは空間タイプと関数を使用できません。

NUGETパッケージ「Microsoft.SqlServer.Types」を追加しSqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));Application_Start methodすべてGlobal.asax.csに追加することで、正常に機能しました。

于 2017-01-08T15:29:30.653 に答える
0

私の場合、接続文字列の構成が不適切なためにこれが発生しました。接続文字列が正しく構成されているかどうかを確認します。

于 2017-03-18T07:11:54.703 に答える