web-dev-qa-db-ja.com

データベースタイプのインスタンスを取得しようとしたときにアクティベーションエラーが発生しました。キー "" <-空白

Enterprise Library 5.0を試していて、BLでいくつかの単体テストを行っていましたが、DLまたはテストプロジェクトにapp.configが必要ですか?

注:Webプロジェクトのweb.configに構成設定が既にあります。

DAABの使い方:

private static Database db = DatabaseFactory.CreateDatabase();

db.ExecuteNonQuery("spInsertSalesman", salesman.Fullname);

DLの私のapp.config:

<configuration>
    <configSections>
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
    </configSections>
    <dataConfiguration defaultDatabase="DBTEST" />
    <connectionStrings>
        <add name="DBTEST" connectionString="Data Source=[dbsource];Initial Catalog=[dbname];User Id=sa;Password=password;"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>
11

間違った.dllコピーを参照していました。今は動作します。

0

他の理由に追加するため。

Enterprise Library5.0.xxxxxを参照しているVS2010ソリューション/ csprojがありました。

ただし、csprojは「Target3.5Framework」に設定されていました。したがって、4.0フレームワークをターゲットにする必要がありましたORエンタープライズライブラリの3.5バージョンに「ダウン」します。

ターゲットフレームワークを4.0に更新できたので、エラーはなくなりました。

コードがコンパイルされたフレームワークのバージョンを把握するためにできることは次のとおりです。(Powershellミニスクリプト)

[System.Reflection.Assembly]::LoadFrom("c:\somefolder\Any_Of_The_Practices.dll").ImageRuntimeVersion

V2.0.50727を入手した場合、Framework 4.0(またはそれ以降)での実行に問題が発生します。

編集:

また、正しい「DbProviderFactories」が定義されていないため、このエラーが発生しました。このURLで見つけたMySql構成を投稿しています:(将来URLが停止した場合に備えて、コピーしています)

http://searchcode.com/codesearch/view/14385662 から)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true"/>
</configSections>

<system.data>
<DbProviderFactories>
<add name="EntLibContrib.Data.MySql"
invariant="EntLibContrib.Data.MySql"
description="EntLibContrib Data MySql Provider"
type="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" />
</DbProviderFactories>
</system.data>

<dataConfiguration defaultDatabase="Default Connection String">
<providerMappings>
<add databaseType="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null"
name="EntLibContrib.Data.MySql"/>
</providerMappings>
</dataConfiguration>

<connectionStrings>
<add name="Default Connection String"
connectionString="database=northwind;uid=root;pwd=admin"
providerName="EntLibContrib.Data.MySql"/>
</connectionStrings>

<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

最後に:

DefaultDatabase値と同じ名前のConnectionString(構成ファイル内)がなかったためにこのエラーが発生した場合。別名、単純な「しびれ頭蓋骨」エラー。

必要に応じて、この安全弁コードを(データベースを作成する直前に)挿入できます。

        DatabaseSettings dataConfig = (DatabaseSettings)ConfigurationManager.GetSection("dataConfiguration");
        string configDefaultDatabase = string.Empty;
        if (null != dataConfig)
        {
            configDefaultDatabase = dataConfig.DefaultDatabase;

            if (!String.IsNullOrEmpty(configDefaultDatabase))
            {
                ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings;
                if (null == connections[configDefaultDatabase])
                {
                    throw new ArgumentOutOfRangeException(
                        string.Format(
                            "Your dataConfiguration (DefaultDatabase) does not match any of your connection strings.  DefaultDatabase='{0}'.",
                            configDefaultDatabase));
                }
            }
        }
3
granadaCoder

これは、GAC dll(アセンブリ内のDLL)とアプリケーションによって参照されるdllの間のdllの不一致が原因です。

アセンブリからdllを削除して、実行してみてください。

  1. 開始->実行
  2. タイプアセンブリ
  3. アクティベーションエラーが発生しているdllを削除します。
  4. IISをリセットします

うまくいけば、それはあなたの問題を解決するでしょう。

1

同じ問題があり、EntLibを5.0から3.1に変更することで解決します

サーバーにMySQL.netコネクタがインストールされていることを確認してください。コネクタをインストールするまで、同じエラーが発生していました。 http://www.mysql.com/products/connector/

0
BA TabNabber

クラスライブラリはapp.configファイルを持つことができます。 EntLib 5.0を使用していて、libarryクラスの接続文字列にアクセスしたい場合は、実際には役に立ちません。したがって、ソリューションで使用しているすべてのweb.configファイルに上記の構成を追加する必要があります。たとえば、UIレイヤーがある場合、Business(クラスライブラリ)とUIレイヤーの間にWCFレイヤーがあり、BusinessレイヤーがWCFサービスとDAL(クラスライブラリ)の間にあります。

ここでは、各UIレイヤーとWCFサービスレイヤーに1つのweb.configファイルがあるため、これら2つのweb.configファイルで上記の設定を組み合わせる必要があります。

0
Archana