web-dev-qa-db-ja.com

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

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

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

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

このローカルで実行すると動作しますが、Azureに発行するとこのエラーが発生します。

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

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

ありがとう!

85
Thomas Bolander

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

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

詳細情報へのリンク

120
Thomas Bolander

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

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

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

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

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

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

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

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

  1. サーバーにアクセスできる場合は、「SQL Server 2012用のMicrosoftシステムCLRタイプ」をインストールするだけです https://www.Microsoft.com/en-us/download/details.aspx?id=29065 または、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も含まれます。

実行時にこれらのアセンブリの正しいアセンブリを読み込むためのコードを追加する必要があります(現在のアーキテクチャに依存します)。

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

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

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

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
23
Tarek El-Mallah

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

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

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

ソリューションは Windows Azureフォーラム からです。

13

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>

これは私のために働いています

4

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

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

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

4
devKoen1

上記の解決策のどれも私には役に立たなかった。

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

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

1
MPM

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

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

私の場合、不適切に構成された接続文字列がこれを引き起こしました。接続文字列が適切に構成されているかどうかを確認します。

0

ちょうど同じ問題がありました。 _EF6_を使用し、空間コマンドを使用するSQL関数を持つSQLを呼び出しています。これを単体テストでテストしましたが、うまくいきました。 _Asp.Net_ソリューションを接続しようとしたときにエラーが発生しました

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

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

0
Bayer White