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以降が見つからなかったため、このプロバイダーでは空間タイプと機能を使用できません。
誰もこれを解決する方法を知っていますか? :)
ありがとう!
私は解決策を見つけました! nugetパッケージMicrosoft.SqlServer.Typesをインストールするだけです
PM>インストールパッケージMicrosoft.SqlServer.Types
アセンブリのバージョン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;
何らかの理由で、この問題を解決するバインディングリダイレクトがありませんでした。
次を追加すると問題が解決しました
<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つの方法があります。
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);
この問題も発生しましたが、Microsoft.SqlServer.Types nugetパッケージは既にインストールされています。
問題を解決したのは、[ソリューション]> [参照設定]> [System.Data.Entity]> [プロパティ]> [ローカルにコピー]を選択し、Trueに設定することでした。
注:Microsoft.SqlServer.Typesのローカルコピーは既にtrueに設定されており、問題はSystem.Data.Entityにありますが、エラーメッセージまだMicrosoft.SqlServer.Typesについてでした。
ソリューションは Windows Azureフォーラム からです。
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>
これは私のために働いています
私にとっての解決策は、次のコード行をApplication_Start()
のGlobal.asax.csに追加するだけでした。
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
兄弟たち、頑張ってください。
上記の解決策のどれも私には役に立たなかった。
このエラーはサーバーのリソースが少ないが原因である可能性もあります。 SQLサーバーを再起動すると、自動的に解決されました。
現在の投稿の回答で コメント に続いて、これらの2行を(主にメイン関数に)追加すると、コンソールアプリの問題が解決しました。
SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
私の場合、不適切に構成された接続文字列がこれを引き起こしました。接続文字列が適切に構成されているかどうかを確認します。
ちょうど同じ問題がありました。 _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
_に追加することで、すべて正常に機能しました。