こんにちは、リモートサーバーでエンティティフレームワークを使用して開発したプロジェクトを公開するのは初めてです。ページは正常に機能しますが、予約領域にアクセスしようとすると、ダバターゼを読んで、このエラーが発生します
要求された.Net Frameworkデータプロバイダーが見つかりません。インストールされていない可能性があります。
説明:現在のWeb要求の実行中に未処理の例外が発生しました。エラーの詳細とコードのどこで発生したかについては、スタックトレースを確認してください。
例外の詳細:System.ArgumentException:要求された.Net Frameworkデータプロバイダーが見つかりません。インストールされていない可能性があります。
ソースエラー:
現在のWeb要求の実行中に、未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタックトレースを使用して特定できます。
スタックトレース:
[ArgumentException:要求された.Net Frameworkデータプロバイダーが見つかりません。インストールされていない可能性があります。]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)+1402071
System.Data.EntityClient.EntityConnection.GetFactory(String providerString)+35[ArgumentException:指定されたストアプロバイダーが構成に見つからないか、無効です。]
System.Data.EntityClient.EntityConnection.GetFactory(String providerString)+62
System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)+263
System.Data.EntityClient.EntityConnection..ctor(String connectionString)+81
System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)+42
System.Data.Objects.ObjectContext..ctor(String connectionString、String defaultContainerName)+16
shield_trust.db_shieldtrustEntities..ctor()in D:\ trust-company\shield_trust\shield_trust\POCO.Context.cs:23
shield_trust.user_login.check_login()in D:\ trust-company\shield_trust\shield_trust\user_login.aspx.cs:65
shield_trust.user_login.entraButton_Click(Object sender、EventArgs e)in D:\ trust-company\shield_trust\shield_trust\user_login.aspx.cs:25
System.Web.UI.WebControls.Button.OnClick(EventArgs e)+118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)+10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl、String eventArgument)+13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint)+5563
Dllをbinフォルダーにコピーするか、web.configを変更する必要がありますか?
これを実行して、インストールされているプロバイダーのリストを取得し、自分のものがあることを確認してください。
// This example assumes a reference to System.Data.Common.
static DataTable GetProviderFactoryClasses()
{
// Retrieve the installed providers and factories.
DataTable table = DbProviderFactories.GetFactoryClasses();
// Display each row and column value.
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.WriteLine(row[column]);
}
}
return table;
}
更新:ターゲットマシンにMySQLプロバイダーをインストールする必要があります。これは、「MySQL Connector Net x.x.x」などと呼ばれ、 このWebサイト から取得できます。
アプリケーション(ASP.NET、テスト、Windowsサービス)で、この作業を行うには、app.configまたはweb.configファイル(configuration
ノード内)に以下を追加する必要がありました。
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
私たちにとっては、32ビットプロセスと64ビットプロセスでした。サーバーは64ビットです。インストールされたODP.NET(Oracle Client)も64ビットです。ターゲットプラットフォーム「Any CPU」および「Prefer 32-bit」フラグSETでコンパイルされたアプリケーション:
32ビットプロセスとして実行されていました。フラグをオフにして再コンパイルすると、すべてが機能し始めました。
次のようなダイアログが表示されたら...
「要求された.NET Frameworkデータプロバイダーが見つかりません。インストールされていない可能性があります」
次の場所にあるmachine.configファイルを確認してください…
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config
空の場合は削除します
"DbProviderFactories" nodes.
これは古いことはわかっていますが、dogで説明されているように、エラーメッセージのこのセクション「指定されたストアプロバイダーが構成内に見つからないか無効です」は問題の内容を示しています。そのため、バックエンドデータベースに応じて、プロバイダー情報を構成ファイルに追加します。既に追加されている場合は、それが正しいことを確認してください。 Oracleの場合、EFおよびOracle.DataAccessのマネージプロバイダーを使用すると、次のようになります。 Oracle dllのバージョンは異なる場合があります。
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.MaanagedDataAccess.Client"/>
<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="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.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data>
恥ずかしいことに、このエラーを解決するために3日間を費やしました。 「connectionString」に間違った「providerName」プロパティがありました
変更後:
<configuration>
<connectionStrings>
<add name="Old" connectionString="Server=servername;Database=databasename;Uid=userid;Pwd=password;" providerName="System.Data.MySqlClient" />
</connectionStrings>
</configuration>
に:
<configuration>
<connectionStrings>
<add name="Old" connectionString="Server=servername;Database=databasename;Uid=userid;Pwd=password;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
System.Data.MySqlClient
の代わりにMysql.Data.MySqlClient
を指定しました
ど!
データベースに接続するとき、実装の抽象化に「データプロバイダー」と呼ばれるものが使用されます。
あなたの例外は、与えられたデータプロバイダーがターゲットマシンに存在しないと言っているようです。展開された環境でどのデータベースを使用しますか?詳細については、web.config接続文字列を確認してください。
グローバルアセンブリキャッシュ(GAC)から利用できるように、指定されたデータプロバイダーをそのマシンに(一度だけ)インストールする必要がある場合があります。
Web.configに追加されたステートメントが役に立ちました。
<system.data>
<DbProviderFactories>
<clear />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
Udogの答えをさらに構築するために、このデータプロバイダーを使用してサーバー上に複数のアプリケーションを作成する場合、machine.configファイルに追加する方が合理的です。
Thomasが指摘しているように、machine.configファイルは次の場所にあります。
C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Config C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Config
Machine.configエントリはweb.configエントリのようなものです。
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
注:アプリケーションが複数のサーバー(QA /テストサーバーと運用サーバーなど)にあり、そのうちの1つでのみこのエラーが発生する場合は、machine.configファイル間でファイルの相違を確認して、存在するかどうかを確認することをお勧めしますサーバー間の違いです。
パーソナルPCにスタンドアロンツールをインストールしようとしたときに、同じエラーが発生しました。この簡単な修正手順を最終的に使用する前に、次の手順を実行しました。NETFramework 2.0および3.0)。 SSCERuntime_x64-ENU.exeをダウンロードしてインストールするこのリンクに従ってダウンロードしてください https://www.Microsoft.com/en-us/download/details.aspx?id=30709 頑張ってください。