web-dev-qa-db-ja.com

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

こんにちは、リモートサーバーでエンティティフレームワークを使用して開発したプロジェクトを公開するのは初めてです。ページは正常に機能しますが、予約領域にアクセスしようとすると、ダバターゼを読んで、このエラーが発生します

要求された.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を変更する必要がありますか?

15
P_R

これを実行して、インストールされているプロバイダーのリストを取得し、自分のものがあることを確認してください。

// 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サイト から取得できます。

14
Paul Zahra

アプリケーション(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>
11
udog

私たちにとっては、32ビットプロセスと64ビットプロセスでした。サーバーは64ビットです。インストールされたODP.NET(Oracle Client)も64ビットです。ターゲットプラットフォーム「Any CPU」および「Prefer 32-bit」フラグSETでコンパイルされたアプリケーション:

http://grab.by/v5ki

32ビットプロセスとして実行されていました。フラグをオフにして再コンパイルすると、すべてが機能し始めました。

4
Greg Z.

次のようなダイアログが表示されたら...

「要求された.NET Frameworkデータプロバイダーが見つかりません。インストールされていない可能性があります」

次の場所にあるmachine.configファイルを確認してください…

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config

空の場合は削除します

"DbProviderFactories" nodes.
4
Thomas

これは古いことはわかっていますが、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>
2
BunmiO

恥ずかしいことに、このエラーを解決するために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を指定しました

ど!

2
birwin

データベースに接続するとき、実装の抽象化に「データプロバイダー」と呼ばれるものが使用されます。

あなたの例外は、与えられたデータプロバイダーがターゲットマシンに存在しないと言っているようです。展開された環境でどのデータベースを使用しますか?詳細については、web.config接続文字列を確認してください。

グローバルアセンブリキャッシュ(GAC)から利用できるように、指定されたデータプロバイダーをそのマシンに(一度だけ)インストールする必要がある場合があります。

1

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

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ファイル間でファイルの相違を確認して、存在するかどうかを確認することをお勧めしますサーバー間の違いです。

0
Tony L.

パーソナルPCにスタンドアロンツールをインストールしようとしたときに、同じエラーが発生しました。この簡単な修正手順を最終的に使用する前に、次の手順を実行しました。NETFramework 2.0および3.0)。 SSCERuntime_x64-ENU.exeをダウンロードしてインストールするこのリンクに従ってダウンロードしてください https://www.Microsoft.com/en-us/download/details.aspx?id=30709 頑張ってください。

0
Peters