'Microsoft.SqlServer.Types'バージョン10以降がAzureで見つかりませんでした


98

ASP.NET MVC 4でwebapiを作成しようとしています。webapiはEntity Framework 5の空間型を使用しており、非常に単純なコードを記述しています。

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

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

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

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

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

ありがとう!


2
クラウドサービスでAzure WebサイトまたはWebロールを使用していますか?また、データベースはSQL Azureデータベースですか?SQL Azureデータベースに対してローカルコードを実行してみましたか?
Joe Capka

回答:


131

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

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

詳細情報へのリンク


4
ありがとう。これは私が午前2時に公開した後でちょうど起こりました。
Lee Smith、

3
そのnugetパッケージを上げてよかった!それもいつも私を惹きつけます。
Pure.Krome 2013年

ああ、神様!DbGeographyを使用するために、ほぼ2MBのバイナリデータがWebアプリに追加されます(これはありません)。SQLServerで使用するとCPUにも負荷がかかります...取り除きます。
Yovav 2016年

13
@Yovav、少なくともフロッピーディスクで実行している2 MBのバイナリデータがアプリケーションのパフォーマンスに影響するとは思わない。ベンチマークを実行して、CPUへの影響を(実際のデータで)お知らせください。
DiomedesDomínguez16年

3
それでは問題を解決するのに十分ではなかったので、私もクリスの回答をしなければなりませんでした。
Shimmy Weitzhandler 2017

114

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

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

これを回避するには、次のように、使用するアセンブリをEntity Frameworkに指示できます。

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

2
優れた点-SQL 2014 CLRタイプのみがインストールされているマシンにも適用されます。今回のケースでは、SQL 2012 CLRタイプをインストールしただけで問題が解決しました。しかし、より高いバージョンのアセンブリに特定の依存関係がある場合は、これが最善の解決策のようです。
Andras Zoltan 2016年

1
これは静的なパブリックプロパティです。アプリケーションの起動時に設定する必要があります。たとえば、WebアプリケーションのGlobal.asax.csのApplication_Startイベントでそれを設定しています。
Chris

3
+1これは私のために働いた唯一のものです。カスタムEntityContextクラス(offを継承するDbContext)のコンストラクターに配置します。
Chris

2
ベーコンを救った!
Matt Cashatt 2017年

23
使用できるアセンブリ名をハードコーディングしないようにするにはSqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
Samuel Jack

68

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

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

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

2
バージョン番号は、お使いのマシン上Microsoft.SqlServer.Typesである何かを見つけるためには、使用することができますAppDomain currentDomain = AppDomain.CurrentDomain; Assembly[] assems = currentDomain.GetAssemblies(); foreach (Assembly assembly in assems) { _logger.Info(assembly.GetName().FullName); }_loggerはNlogロガーです
ダニエル・チューリップ

1
これで私の問題が解決しました(タイプがすでに私の場合にインストールされていたため)。SQL Serverのタイプをインストールした後もエラーが発生する場合は、この回答を確認してください。
CanPoyrazoğlu2017

1
@ R2D2ありがとう、これで修正されました。
オグラス

1
SQLServerTypesをインストールしましたが、まだ問題が発生していました。これをweb.configに追加すると、修正されました。
saurabhj

25

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

  1. サーバーにアクセスできる場合は、https://www.microsoft.com/en-us/download/details.aspx?id = 29065 から「Microsoft System CLR Types 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);

2
SQL ServerまたはNuGetをインストールしても何も解決されませんでした。これらの単純なCLR型で問題が解決されました。これは受け入れられる解決策です。
CanPoyrazoğlu2017年

1
X64へのリンクは、Microsoft SQL Server 2016(SP1)(KB3182545)-13.0.4001.0(X64)2016年10月28日18:17:30著作権(c)Microsoft Corporation Express Edition(64ビット)on Windows 10 Enterpriseで私のために働いています6.3 <X64>(ビルド10586:)
zapoo 2017年

ASP.NETスタイルのローダーを使用する必要がありましたが、開発パスはの~/代わりでした~/bin。必ずパスも確認してください。
jocull 2017

必要なSQLのバージョンのSQLサーバーパックをインストールできましたが、SQLサーバーのバージョンごとにすべて異なるため、バインドリダイレクトがインストール済みのバージョンを指していることを確認する必要がありました。
クリス・ライス

13

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

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

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

解決策はWindows Azureフォーラムからです。


1
このオプションは、nugetパッケージでは使用できません。
Shimmy Weitzhandler 2017

これは、前述のように、参照のプロパティオプションにあり、nugetのオプションではないためです。回避策をありがとうございます!私のために働きました
Emixam23

8

"dependentAssembly"を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>

これは私のために働いた


5

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

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

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


3

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

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

2

私の場合(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";

誰かのお役に立てば幸いです。


これはVS 2019環境で機能しました、最新の修正。共有してくれてありがとう
coder kemp

1

上記の解決策のどれも私に役立ちませんでした。

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

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


0

ちょうど同じ問題がありました。私は、空間コマンドを使用するSQL関数を使用してEF6呼び出しSQLています。これを単体テストでテストしましたが、問題なく動作しました。私はアップ配線に行ったときにAsp.Net解決策を、私は、エラーを受け取りました

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

追加することによりNUGETパッケージ「Microsoft.SqlServer.Typesを」と追加することSqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));Application_Start methodしてGlobal.asax.cs、すべての罰金を働きました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.