4

最近、Windows フォーム C# プロジェクトを NHibernate 2.0 から 2.1 にアップグレードしました。app.config を更新して、選択したプロキシ (この場合は「NHibernate.ByteCode.Castle」) を指す「proxyfactory.factory_class」を含めます。アップグレード後、プログラムは期待どおりにビルドおよび実行され、問題は発生しません。私たちの問題は、Visual Studio 2008 デザイナー内でロード時に NHibernate への参照を含むフォームを開こうとすると、次のエラーが表示されることです (プロキシを構成していないかのように)。

ProxyFactoryFactory が構成されていません。使用可能な NHibernate.ByteCode プロバイダーの 1 つを使用して、session-factory 構成セクションの「proxyfactory.factory_class」プロパティーを初期化します。

スタックトレース:

   at NHibernate.Bytecode.AbstractBytecodeProvider.get_ProxyFactoryFactory()
   at NHibernate.Cfg.Configuration.Validate()
   at NHibernate.Cfg.Configuration.BuildSessionFactory()
   at DAL.NHibernateHelper..cctor() in ...\DAL\NHibernateHelper.cs:line 62

NHibernateHelper の 62 行目:

    static NHibernateHelper()
    {
        var cfg = new Configuration();
        cfg.Configure();
        cfg.AddAssembly("DAL");
        sessionFactory = cfg.BuildSessionFactory(); // <-- line 62
    }

NHibernate の app.config 構成は次のとおりです。

<configuration>
  <configSections>
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
  </configSections>
  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
      <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
      <property name="connection.connection_string">Server=ourserver;initial catalog=ourdb;Integrated Security=SSPI</property>
      <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
      <property name="show_sql">true</property>
    </session-factory>
  </hibernate-configuration>
</configuration>

この問題を解決する方法について手がかりを持っている人はいますか? ありがとう!

4

4 に答える 4

3

私はちょうど同じエラーを解決しました。

私のデータ アクセス アセンブリには、Nhibernate.ByteCode.Castle.Dll への適切な参照があり、bin/release フォルダーに表示されました。すべてがデータ アクセス アセンブリ内で正常に機能しました。

テスト アセンブリからデータ アクセス コードを使用しようとすると、エラーがスローされました。テスト アセンブリがデータ アクセス プロジェクトを参照していても、Nhibernate.ByteCode.Castle.dll のコピーを取得していないことが判明しました。テスト アセンブリに Nhibernate.ByteCode.Castle.dll への参照を追加すると、問題が解決しました。

于 2009-08-07T19:45:45.183 に答える
1

私も同じ問題を抱えていました。これを修正するには、DLL を明示的に参照するだけでなく、NHibernate.ByteCode.Castle.ProxyFactoryFactory を明示的に作成するメソッドをテスト DLL に追加する必要がありました。

それはトリックをしました。

于 2009-11-05T17:39:27.483 に答える
0

Nhibernate.ByteCode.Castle 参照のプロパティで、\bin フォルダーにコピーされるように「常にコピー」に設定していることを確認してください。

于 2009-07-30T23:40:33.373 に答える
0

Designer が何らかの方法で SessionFactory を初期化しているようです。プロジェクトへの参照として ByteCodeProvider dll を追加しようとしましたか?

[編集] OK...、デプロイ時にアプリケーションが実行されるという事実は、すべてが正しく構成されていることを意味します。あなたの問題はVS DesignModeの問題です。なぜ (一体) デザイン モードで NHibernate を使用しているのですか? 本当に必要な場合は、コードで ByteCodeProvider を設定してみてください。必要がなく、簡単な回避策が必要な場合は、このハックで現在の VS モードを確認して、Nhibernate が SessionFactory を構築できないようにすることができます。

static NHibernateHelper()
{
    if(System.Diagnostics.Process.GetCurrentProcess().ProcessName != "devenv")
    {
        var cfg = new Configuration();
        cfg.Configure();
        cfg.AddAssembly("DAL");
        sessionFactory = cfg.BuildSessionFactory(); // <-- line 62
    }
}

私があなただったら、コントロールまたはこの静的 NHibernateHelper を必要とするものを見つけて、分離しようとします。

于 2009-07-30T21:57:06.233 に答える