2

Visual Studio 2010 Ultimate を使用しています。プロジェクトは c# MVC3 Razor です。

MySql(オンラインサーバーから)データベースを使用してローカルマシンで問題なく実行されているプロジェクトがありますが、アップロードすると、MySqlサーバーからデータを取得する必要がある部分に到達すると、このエラーが発生します:

要求された .Net Framework Data Provider が見つかりません。インストールされていない可能性があります。

これは、MySql の Web.config からの接続文字列で、プロジェクトをローカルでデバッグすると正常に動作します。テーブルから情報を読み取り、ページに表示します。

<add name="istakipDBContext" 
connectionString="Server=xxx.xxx.xxx.xxx; Database=xxx; Uid=xxx;
Pwd=xxx;"  providerName="MySql.Data.MySqlClient" />

そして、これはスタック トレース全体です。

「/」アプリケーションでサーバー エラーが発生しました。要求された .Net Framework Data Provider が見つかりません。インストールされていない可能性があります。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.ArgumentException: 要求された .Net Framework データ プロバイダーが見つかりません。インストールされていない可能性があります。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[ArgumentException: 要求された .Net Framework Data Provider が見つかりません。インストールされていない可能性が あり ます
。() +47 System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel() +9 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +262 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(エンティティ タイプの型) + 17 System.Data.Entity.Internal.Linq.InternalSet 1.GetEnumerator() +15 System.Data.Entity.Infrastructure.DbQuery



1.Initialize() +63
System.Data.Entity.Internal.Linq.InternalSet

1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +40 System.Collections.Generic.List1..ctor(IEnumerable 1 collection) +315 System.Linq.Enumerable.ToList(IEnumerable1 source) +58 onlinetercume.Controllers.istakiplerController.Index() in C:\wwwroot\nps\nps\Controllers\istakiplerController.cs:21 lambda_method(Closure , ControllerBase , Object[] ) +62
システム.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase コントローラー、Object[] パラメーター) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext、IDictionary 2 パラメーター) +27 System.Web.Mvc.<>c_ DisplayClass15.b _12() +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter フィルター、ActionExecutingContext preContext、Func 1 フィルター、ActionDescriptor actionDescriptor、IDictionary 1.b__7(IAsyncResult 2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary

1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
2 parameters) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8
) +12 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 System.Web.Mvc.<>c _DisplayClasse.b_ d() +50
System.Web.Mvc.SecurityUtil.b
_0(アクション f ) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(アクション アクション) +22 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult )結果) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970061 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.272

4

3 に答える 3

3

エラーは明らかです。MySQL データ プロバイダーが見つかりません

運用サーバーに展開した場合、おそらく MySQL コンポーネントを展開していない可能性があります。MySQL dll がアプリケーションの bin フォルダーに展開されていることを確認してください。

一般的な問題は、コンポーネントが開発サンドボックスの GAC にインストールされていて、それらが運用サーバーに存在しない場合です。dll が GAC にあるかどうかを確認します。

グローバル アセンブリ キャッシュ (GAC) は次の場所にあります。%windir%\assembly

アセンブリのcopy alwaysプロパティを true に選択することで、プロジェクトからの参照を強制的に運用サーバーに展開することができますが、GAC からの参照を解決するように構成されている場合は、コンポーネントを GAC にインストールすることをお勧めします。生産ボックスで:

ここに画像の説明を入力

ここに画像の説明を入力

以下は、GAC に MySQL データ プロバイダーをインストールする手順です。

http://blog.jeffreymcmanus.com/555/installing-the-mysql-adonet-connector-into-the-global-assembly-cache/

要約として:

  • 解決策 1:

    次のコマンドを実行して、MySQL データ プロバイダーを GAC に登録します (この方法で、MySQL データ プロバイダーのバージョンがサーバー内のすべてのアプリケーションでグローバルに使用できるようにインストールされます)。

    "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe" /i MySql.Data.dll

  • 解決策 2:

    MySql.Data.dlldll をアプリケーションのbinディレクトリにコピーします。

于 2012-06-01T02:42:43.870 に答える
0

プロバイダーは、階層構成ファイルの 1 つに登録する必要があります。たとえば、oracle プロバイダーを machine.config ファイルに登録しています (これは、セットアップ インストーラーで odac をインストールしたときに自動的に行われるようです)。

私の machine.config は次のようになります。

<system.data>
<DbProviderFactories>
  <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>

Asp.Net アプリケーションでは、階層内に aslo web.config という別の cofig ファイルがあるため、注意してください。machine.config と同じフォルダにあります。このリンクでは、Asp.Net の構成階層について説明しています: msdn

プロバイダーがそのファイルのいずれかに登録されていない場合、報告されたエラーがスローされます。その場合、それを解決する最善の方法は、asp.net アプリケーション web.config ファイルに構成を直接追加することだと思います。そんな感じ:

<system.data>
<DbProviderFactories>
  <remove invariant="Oracle.DataAccess.Client" />
  <add name="Oracle Data Provider for .NET"
          invariant="Oracle.DataAccess.Client"
          description="Oracle Data Provider for .NET"
          type="Oracle.DataAccess.Client.OracleClientFactory,
              Oracle.DataAccess,
              Version=2.111.7.20,
              Culture=neutral,
              PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>

于 2016-10-07T13:02:20.847 に答える